El uso de la biblioteca de solicitudes (muy detallada) desde la entrada de base cero hasta la competencia, es suficiente para leer este artículo

La biblioteca urllib es engorrosa de usar. Por ejemplo, cuando se trata de verificación de páginas web y cookies, debe escribir Opener y Handler para manejarlo. Para realizar estas operaciones de forma más cómoda, existe una biblioteca de peticiones más potente.

Instalación de la biblioteca de solicitudes

Requests es una biblioteca de terceros y Python no está integrado, por lo que debemos instalarlo manualmente.

1. Enlaces relacionados

  • GitHub: https://github.com/psf/requests

  • PyPI:https://pypi.org/project/requests/

  • Documentación oficial: https://docs.python-requests.org/en/latest/

  • Documentación en chino: https://docs.python-requests.org/zh_CN/latest/user/quickstart.html

2. Instalar a través de pip

Ya sea Windows, Linux o Mac, las solicitudes se pueden instalar a través de pip, una herramienta de administración de paquetes. Ejecute el siguiente comando en la interfaz de línea de comandos para completar la instalación de la biblioteca de solicitudes:

pip3 install requests

Además de instalar a través de pip, también se puede instalar a través de rueda o código fuente, que no se describirán aquí.

3. Verificar la instalación

Puede probar si las solicitudes se instalaron correctamente importando la biblioteca de importación en la línea de comando.
La biblioteca de importación es exitosa, lo que indica que la instalación de las solicitudes se realizó correctamente.

uso básico

El siguiente ejemplo envía una solicitud de obtención usando el método get() en la biblioteca de solicitudes.

#导入requests库
import requests
#发送一个get请求并得到响应
r = requests.get('https://www.baidu.com')
#查看响应对象的类型
print(type(r))
#查看响应状态码
print(r.status_code)
#查看响应内容的类型
print(type(r.text))
#查看响应的内容
print(r.text)
#查看cookies
print(r.cookies)

​ Aquí, se llama al método get() para implementar la misma operación que urlopen(), y como resultado se devuelve un objeto de respuesta, y luego el tipo de objeto de respuesta, el código de estado, el tipo de contenido del cuerpo de la respuesta, el contenido del cuerpo de la respuesta y Las cookies se emiten respectivamente. A partir de los resultados de ejecución, podemos saber que el tipo de objeto de respuesta es request.models.Response, el tipo de contenido del cuerpo de respuesta es str y el tipo de Cookies es RequestCookieJar. Si desea enviar otro tipo de solicitudes, simplemente llame directamente a sus métodos correspondientes:

r = requests.post('https://www.baidu.com')
r = requests.put('https://www.baidu.com')
r = requests.delete('https://www.baidu.com')
r = requests.head('https://www.baidu.com')
r = requests.options('https://www.baidu.com')

OBTENER solicitud

Cree una solicitud GET y solicite http://httpbin.org/get (el sitio web juzgará que si el cliente inicia una solicitud GET, devolverá la información correspondiente)

import requests
r = requests.get('http://httpbin.org/get')
print(r.text)


1) Si desea agregar parámetros de solicitud, como agregar dos parámetros de solicitud, donde el valor del nombre es germey y el valor de la edad es 20. Aunque se puede escribir de la siguiente manera:

r = requests.get('http://httpbin.org/get?name=germey&age=20')

Pero una mejor manera de escribir es la siguiente:

import requests
data = {
	'name':'germey',
  'age':22
}
r = requests.get('http://httpbin.org/get',params=data)
print(r.text)


A partir de los resultados de la ejecución, se puede ver que la URL solicitada finalmente se construye como "http://httpbin.org/get?name=germey&age=20".

2) El tipo de contenido devuelto de la página web es de tipo str, si se ajusta al formato JSON, puede usar el método json() para convertirlo en un tipo de diccionario para facilitar el análisis.

import requests
r = requests.get('http://httpbin.org/get')
#str类型
print(type(r.text))
#返回响应内容的字典形式
print(r.json())
#dict类型
print(type(r.json()))

Sin embargo, debe tenerse en cuenta que si el contenido devuelto no está en formato JSON, se producirá un error al llamar al método json() y se generará una excepción json.decoder.JSONDecodeError.

Solicitud POST

1) Enviar una solicitud POST.

import requests
r = requests.post('http://httpbin.org/post')
print(r.text)

2) Enviar una solicitud POST con parámetros de solicitud.

import requests
data = {
  "name":"germey",
  "age":"22"
}
r = requests.post('http://httpbin.org/post',data=data)
print(r.text)


En el método de solicitud POST, la parte del formulario es el parámetro de solicitud.

establecer encabezado de solicitud

import requests
headers = {
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0',
  'my-test':'Hello'
}
r = requests.get('http://httpbin.org/get',headers=headers)
print(r.text)

respuesta

1) Después de enviar la solicitud, se devuelve una respuesta, que tiene muchos atributos, y el código de estado, el encabezado de la respuesta, las cookies, el contenido de la respuesta, etc. se pueden obtener a través de sus atributos. como sigue:

import requests
r = requests.get('https://www.baidu.com/')
#响应内容(str类型)
print(type(r.text),r.text)
#响应内容(bytes类型)
print(type(r.content),r.content)
#状态码
print(type(r.status_code),r.status_code)
#响应头
print(type(r.headers),r.headers)
#Cookies
print(type(r.cookies),r.cookies)
#URL
print(type(r.url),r.url)
#请求历史
print(type(r.history),r.history)

2) El código de estado se usa a menudo para determinar si la solicitud es exitosa. Además del código de estado proporcionado por HTTP, la biblioteca de solicitudes también proporciona un objeto de consulta de código de estado integrado llamado request.codes. De hecho, ambos son equivalentes . Los ejemplos son los siguientes:

import requests
r = requests.get('https://www.baidu.com/')
if not r.status_code==requests.codes.ok:
  print('Request Fail')
else:
  print('Request Successfully')

​ Los códigos de estado que pertenecen al objeto request.codes son los siguientes:

#信息性状态码
100:('continue',),
101:('switching_protocols',),
102:('processing',),
103:('checkpoint',),
122:('uri_too_long','request_uri_too_long'),

#成功状态码
200:('ok','okay','all_ok','all_okay','all_good','\\o/','√'),
201:('created',),
202:('accepted',),
203:('non_authoritative_info','non_authoritative_information'),
204:('no_content',),
205:('reset_content','reset'),
206:('partial_content','partial'),
207:('multi_status','multiple_status','multi_stati','multiple_stati'),
208:('already_reported',),
226:('im_used',),

#重定向状态码
300:('multiple_choices',),
301:('moved_permanently','moved','\\o-'),
302:('found',),
303:('see_other','other'),
304:('not_modified',),
305:('user_proxy',),
306:('switch_proxy',),
307:('temporary_redirect','temporary_moved','temporary'),
308:('permanent_redirect',),

#客户端请求错误
400:('bad_request','bad'),
401:('unauthorized',),
402:('payment_required','payment'),
403:('forbiddent',),
404:('not_found','-o-'),
405:('method_not_allowed','not_allowed'),
406:('not_acceptable',),
407:('proxy_authentication_required','proxy_auth','proxy_authentication'),
408:('request_timeout','timeout'),
409:('conflict',),
410:('gone',),
411:('length_required',),
412:('precondition_failed','precondition'),
413:('request_entity_too_large',),
414:('request_uri_too_large',),
415:('unsupported_media_type','unsupported_media','media_type'),
416:('request_range_not_satisfiable','requested_range','range_not_satisfiable'),
417:('expectation_failed',),
418:('im_a_teapot','teapot','i_am_a_teapot'),
421:('misdirected_request',),
422:('unprocessable_entity','unprocessable'),
423:('locked'),
424:('failed_dependency','dependency'),
425:('unordered_collection','unordered'),
426:('upgrade_required','upgrade'),
428:('precondition_required','precondition'),
429:('too_many_requests','too_many'),
431:('header_fields_too_large','fields_too_large'),
444:('no_response','none'),
449:('retry_with','retry'),
450:('blocked_by_windows_parental_controls','parental_controls'),
451:('unavailable_for_legal_reasons','legal_reasons'),
499:('client_closed_request',),

#服务端错误状态码
500:('internal_server_error','server_error','/o\\','×')
501:('not_implemented',),
502:('bad_gateway',),
503:('service_unavailable','unavailable'),
504:('gateway_timeout',),
505:('http_version_not_supported','http_version'),
506:('variant_also_negotiates',),
507:('insufficient_storage',),
509:('bandwidth_limit_exceeded','bandwith'),
510:('not_extended',),
511:('network_authentication_required','network_auth','network_authentication')

rastrear datos binarios

Los archivos como imágenes, audio y video se componen esencialmente de códigos binarios, por lo que si desea rastrearlos, debe obtener sus códigos binarios. Tomemos como ejemplo el rastreo del ícono del sitio de Baidu (el ícono pequeño en la pestaña):

import requests
#向资源URL发送一个GET请求
r = requests.get('https://www.baidu.com/favicon.ico')
with open('favicon.ico','wb') as f:
  f.write(r.content)

Utilice el método open( ), su primer parámetro es guardar el nombre del archivo (con una ruta), y el segundo parámetro indica escribir datos en forma binaria. Después de ejecutar, puede encontrar el icono guardado llamado favicon.ico en el directorio actual. Del mismo modo, el audio y el video también se pueden obtener de esta manera.

Subir archivo

Las solicitudes pueden simular el envío de algunos datos. Si un sitio web necesita subir archivos, también podemos lograrlo.

import requests
#以二进制方式读取当前目录下的favicon.ico文件,并将其赋给file
files = {'file':open('favicon.ico','rb')}
#进行上传
r = requests.post('http://httpbin.org/post',files=files)
print(r.text)

Manejo de cookies

Usar urllib para manejar cookies es más complicado, pero usar solicitudes para manejar cookies es muy simple.

1) Obtener Cookies.

import requests
r = requests.get('https://www.baidu.com')
#打印Cookies对象
print(r.cookies)
#遍历Cookies
for key,value in r.cookies.items():
	print(key+'='+value)

Las cookies se pueden obtener llamando a la propiedad de cookies del objeto de respuesta, que es un objeto de tipo RequestCookiesJar, y luego usar el método items() para convertirlo en una lista de tuplas, y recorrer y generar el nombre y el valor de cada uno. Galleta.

2) Usar cookies para mantener el estado de inicio de sesión. Tome Zhihu como ejemplo, primero inicie sesión en Zhihu, ingrese a una página a la que solo se pueda acceder después de iniciar sesión y copie las Cookies en los encabezados en las herramientas de desarrollo del navegador (a veces, las Cookies copiadas directamente contienen puntos suspensivos, lo que hará que el programa Si hay un error, puede ingresar document.cookie en el elemento Consola para obtener la cookie completa), usarlo en el programa, configurarlo en los encabezados y luego enviar la solicitud.

import requests
headers = {
  'Cookie':'_zap=616ef976-1fdb-4b8c-a3cb-9327ff629ff1; _xsrf=0CCNkbCLtTAlz5BfwhMHBHJWW791ZkK6; d_c0=\"AKBQTnFIRhSPTpoYIf6mUxSic2UjzSp4BYM=|1641093994\"; __snaker__id=mMv5F3gmBHIC9jJg; gdxidpyhxdE=E%2BNK7sMAt0%2F3aZ5Ke%2FSRfBRK7B1QBmCtaOwrqJm%2F1ONP3VPItkrXCcMiAX3%2FIsSxUwudQPyuDGO%2BlHGPvNqGqO9bX1%2B58o7wmf%2FZewh8xSPg%2FH3T2HoWsrs7ZhsSGND0C0la%2BXkLIIG5XXV85PxV5g99d%5CMph%2BbkX1JQBGhDnL3N0zRf%3A1641094897088; _9755xjdesxxd_=32; YD00517437729195%3AWM_NI=rMeMx2d5Yt3mg0yHPvuPGTjPnGtjL%2Bn%2FPSBnVn%2FHFAVZnIEABUIPITBdsHmMX1iCHfKauO4qhW%2Bi5bTy12Cg91vrxMPgOHtnaAylN8zk7MFpoTr%2FTeKVo3%2FKSSM6T5cNSGE%3D; YD00517437729195%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee8bea40f8e7a4b2cf69b3b48fb7c54b979b8fbaf17e93909b91fb338ebaaeadec2af0fea7c3b92ab293abaefb3aa8eb9795b267a5f0b7a9d37eb79089b5e95cae99bc8bcf21aef1a0b4c16696b2e1a9c54b9686a2aac84b828b87b1cc6082bcbda9f0479cefa7a4cb6e89bfbbb0b77bac89e58ab86a98a7ffd3c26dfbefba93fb4794b981a9f766a39fb78dcd34bab5f9aec57cad8cbed0d76f898aa1d4ae41918d83d7d73fa1929da8c837e2a3; YD00517437729195%3AWM_TID=Kji43bLtZbRAAAVABFMu4upmK4C%2BEGQH; KLBRSID=9d75f80756f65c61b0a50d80b4ca9b13|1641268679|1641267986; tst=r; NOT_UNREGISTER_WAITING=1; SESSIONID=lbWS7Y8pmp5qM1DErkXJCahgQwwyl79eT8XAOC6qC7A; JOID=V1wXAUwzD9BQH284PTQMxsZMqrkrXmuHBio3Bk1cfuMhV1x9fiHKBjYcaD44XxiWm2kKD5TjJvk-7iTeM3d6aYA=; osd=VVoQAk0xCddTHm0-OjcNxMBLqbgpWGyEBygxAU5dfOUmVF1_eCbJBzQabz05XR6RmGgICZPgJ_s46SffMXF9aoE=; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1640500881,1641093994,1641267987; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1641268678',
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0',
  'Host':'www.zhihu.com'
}
r = requests.get('https://www.zhihu.com/people/xing-fu-shi-fen-dou-chu-lai-de-65-18',headers=headers)
print(r.text)

Después de la ejecución, el resultado contiene el contenido después del inicio de sesión, lo que indica que el estado de inicio de sesión se obtuvo correctamente.

3) También se puede configurar a través del parámetro de cookies, pero de esta manera, el objeto RequestCookieJar debe construirse y las siguientes cookies deben dividirse, lo que es relativamente engorroso, pero el efecto es el mismo.

import requests

cookies ='_zap=616ef976-1fdb-4b8c-a3cb-9327ff629ff1; _xsrf=0CCNkbCLtTAlz5BfwhMHBHJWW791ZkK6; d_c0=\"AKBQTnFIRhSPTpoYIf6mUxSic2UjzSp4BYM=|1641093994\"; __snaker__id=mMv5F3gmBHIC9jJg; gdxidpyhxdE=E%2BNK7sMAt0%2F3aZ5Ke%2FSRfBRK7B1QBmCtaOwrqJm%2F1ONP3VPItkrXCcMiAX3%2FIsSxUwudQPyuDGO%2BlHGPvNqGqO9bX1%2B58o7wmf%2FZewh8xSPg%2FH3T2HoWsrs7ZhsSGND0C0la%2BXkLIIG5XXV85PxV5g99d%5CMph%2BbkX1JQBGhDnL3N0zRf%3A1641094897088; _9755xjdesxxd_=32; YD00517437729195%3AWM_NI=rMeMx2d5Yt3mg0yHPvuPGTjPnGtjL%2Bn%2FPSBnVn%2FHFAVZnIEABUIPITBdsHmMX1iCHfKauO4qhW%2Bi5bTy12Cg91vrxMPgOHtnaAylN8zk7MFpoTr%2FTeKVo3%2FKSSM6T5cNSGE%3D; YD00517437729195%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee8bea40f8e7a4b2cf69b3b48fb7c54b979b8fbaf17e93909b91fb338ebaaeadec2af0fea7c3b92ab293abaefb3aa8eb9795b267a5f0b7a9d37eb79089b5e95cae99bc8bcf21aef1a0b4c16696b2e1a9c54b9686a2aac84b828b87b1cc6082bcbda9f0479cefa7a4cb6e89bfbbb0b77bac89e58ab86a98a7ffd3c26dfbefba93fb4794b981a9f766a39fb78dcd34bab5f9aec57cad8cbed0d76f898aa1d4ae41918d83d7d73fa1929da8c837e2a3; YD00517437729195%3AWM_TID=Kji43bLtZbRAAAVABFMu4upmK4C%2BEGQH; KLBRSID=9d75f80756f65c61b0a50d80b4ca9b13|1641268679|1641267986; tst=r; NOT_UNREGISTER_WAITING=1; SESSIONID=lbWS7Y8pmp5qM1DErkXJCahgQwwyl79eT8XAOC6qC7A; JOID=V1wXAUwzD9BQH284PTQMxsZMqrkrXmuHBio3Bk1cfuMhV1x9fiHKBjYcaD44XxiWm2kKD5TjJvk-7iTeM3d6aYA=; osd=VVoQAk0xCddTHm0-OjcNxMBLqbgpWGyEBygxAU5dfOUmVF1_eCbJBzQabz05XR6RmGgICZPgJ_s46SffMXF9aoE=; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1640500881,1641093994,1641267987; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1641268678'
jar = requests.cookies.RequestsCookieJar()
headers = {
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0',
  'Host':'www.zhihu.com'
}
for cookie in cookies.split(';'):
  key,value = cookie.split('=',1)
  jar.set(key,value)
r = requests.get('https://www.zhihu.com/people/xing-fu-shi-fen-dou-chu-lai-de-65-18',headers=headers)
print(r.text)

mantenimiento de sesión

Al llamar a métodos como get() o post(), puede simular solicitudes de páginas web, pero en realidad esto es equivalente a diferentes sesiones, es decir, usa dos navegadores para abrir páginas diferentes. Si la primera solicitud utiliza el método post( ) para iniciar sesión en el sitio web, y la segunda vez que desea obtener su propia información personal después de iniciar sesión correctamente, utilice el método get( ) para obtener la información personal solicitada nuevamente. , esto es equivalente a abrir dos navegadores, por lo que la información personal no se puede obtener con éxito. Por esta razón, se requiere el mantenimiento de la sesión. Puede configurar las mismas Cookies en dos solicitudes, pero esto es muy engorroso y una sesión se puede mantener fácilmente a través de la clase Session.

import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)

Primero abra una sesión a través de solicitudes y luego envíe una solicitud de obtención a través de la sesión, que se usa para establecer el número de parámetro en las cookies, el valor del parámetro es 123456789; luego use esto para iniciar una solicitud de obtención de cookies y luego imprima la captura contenido.


obtenido con éxito.

Verificación de certificado SSL

Las solicitudes también proporcionan una función de verificación de certificados. Cuando se envía una solicitud HTTP, verificará el certificado SSL. Podemos usar el parámetro de verificación para controlar si verificar el certificado SSL.

1) Al solicitar un sitio web HTTPS, si la institución CA no confía en el certificado del sitio web, el programa cometerá un error y generará un error de verificación del certificado SSL. Para esto, simplemente establezca el parámetro de verificación en False. como sigue:

import requests
resposne = requests.get('https://www.12306.cn',verify=False)
print(response.status_code)

También es posible especificar un certificado local para usar como certificado de cliente, que puede ser un solo archivo (que contiene la clave y el certificado) o una tupla que contiene rutas a dos archivos.

import requests
#本地需要有crt和key文件(key必须是解密状态,加密状态的key是不支持的),并指定它们的路径,
response = requests.get('https://www.12306.cn',cert('/path/server.crt','/path/key'))
print(response.status_code)

2) Al solicitar un sitio web HTTPS cuyo certificado SSL no es reconocido por la institución CA, aunque el parámetro de verificación esté configurado en False, se puede generar una advertencia cuando se ejecuta el programa.En la advertencia, se recomienda especificar un certificado para que se puede proteger configurando la advertencia de ignorar Esta advertencia:

import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://www.12306.cn',verify=False)
print(response.status_code)

或者通过捕获警告到日志的方式忽略警告:

import logging
import requests
logging.captureWarnings(True)
response = requests.get('https://www.12306.cn',verify=False)
print(response.status_code)

configuración de proxy

Para algunos sitios web, el contenido se puede obtener normalmente después de solicitarlo varias veces durante la prueba. Sin embargo, una vez que comienza el rastreo frecuente y a gran escala, el sitio web puede mostrar un código de verificación, o saltar a la página de verificación de inicio de sesión, o incluso bloquear directamente la IP del cliente, lo que resulta en la imposibilidad de acceder durante un cierto período de tiempo. Para evitar esto, necesitamos usar proxies para resolver este problema, lo que requiere el parámetro proxies.

1) Establecer proxy

import requests

proxies = {
  	#该代理服务器在免费代理网站上得到的,这样的网站有很多
    'http': 'http://161.35.4.201:80',
    'https': 'https://161.35.4.201:80' 
}
try:
    response = requests.get('http://httpbin.org/get', proxies=proxies)
    print(response.text)
except requests.exceptions.ConnectionError as e:
    print('Error', e.args)


Se puede encontrar que estamos usando un servidor proxy para el acceso.

2) Si el proxy necesita usar HTTP Basic Auth, puede usar una sintaxis como http://usuario:contraseña@host:puerto para configurar el proxy.

import requests
proxies = {
  "http":"http://user:[email protected]:80"
}
r = requests.get("https://www.taobao.com",proxies=proxies)
print(r.text)

3) Además del proxy HTTP básico, las solicitudes también admiten el proxy del protocolo SOCKS. Primero necesitas instalar la biblioteca de calcetines:

pip3 install 'requests[socks]'

import requests
proxies = {
  'http':'socks5://user:password@host:port',
  'https':'socks5://user:password@host:port'
}
request.get('https://www.taobao.com',proxies=proxies)

Entonces puedes usar el proxy del protocolo SOCKS

import requests
proxies = {
  'http':'socks5://user:password@host:port',
  'https':'socks5://user:password@host:port'
}
requests.get('https://www.taobao.com',proxies=proxies)

ajuste de tiempo de espera

Cuando la condición de la red local no es buena o la respuesta de la red del servidor es demasiado lenta o incluso no responde, podemos esperar mucho tiempo antes de recibir una respuesta, o incluso informar un error si no recibimos una respuesta al final. Para hacer frente a esta situación, se debe establecer un tiempo de espera, que es el tiempo desde que la computadora envía una solicitud hasta que el servidor devuelve una respuesta.Si la solicitud supera este tiempo de espera y no ha recibido una respuesta, se mostrará un error. arrojado Esto debe implementarse utilizando el parámetro de tiempo de espera, en segundos.

1) Especifique el tiempo de espera total de la solicitud

import requests
#向淘宝发出请求,如果1秒内没有得到响应,则抛出错误
r = requests.get('https://www.taobao.com',timeout=1)
print(r.status_code)

2) Especifique el tiempo de espera respectivamente. De hecho, la solicitud se divide en dos fases: conexión (connect) y lectura (read). Si especifica un valor entero para el parámetro de tiempo de espera, el período de tiempo de espera es la suma de las dos etapas; si desea especificarlas por separado, puede pasar en una tupla, el tiempo de espera de conexión y el tiempo de espera de lectura:

import requests
#向淘宝发出请求,如果连接阶段5秒内没有得到响应或读取阶段30秒内没有得到响应,则抛出错误
r = requests.get('https://www.taobao.com',timeout=(5,30))
print(r.status_code)

3) Si desea esperar para siempre, puede establecer directamente el tiempo de espera en Ninguno, o no establecer el parámetro de tiempo de espera, porque su valor predeterminado es Ninguno.

import requests
#向淘宝发出请求,如果连接阶段5秒内没有得到响应或读取阶段30秒内没有得到响应,则抛出错误
r = requests.get('https://www.taobao.com',timeout=None))
print(r.status_code)

Autenticación

Al visitar un sitio web, puede encontrar la siguiente página de verificación:

1) En este momento, puede usar la función de autenticación que viene con las solicitudes, que se implementa a través de la clase HTTPBasicAuth.

import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://localhost:8080/manager/html',auth=HTTPBasicAuth('admin','123456'))
print(r.status_code)

​ Si el nombre de usuario y la contraseña son correctos, se devuelve un código de estado 200; de lo contrario, se devuelve un código de estado 401. En lugar de usar la clase HTTPBasicAuth, puede pasar una tupla directamente y usará la clase HTTPBasicAuth para la autenticación de forma predeterminada.

import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://localhost:8080/manager/html',auth=('admin','123456'))
print(r.status_code)

2) las solicitudes también proporcionan otros métodos de autenticación, como la autenticación OAuth, pero debe instalar el paquete oauth, el comando de instalación es el siguiente:

pip3 install requests_oauthlib

El método para utilizar la autenticación OAuth es el siguiente:

import requests
from requests_oauthlib import OAuth1
url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1("YOUR_APP_KEY","YOUR_APP_SECRET","USER_OAUTH_TOKEN","USER_OAUTH_TOKEN_SECRET")
requests.get(url,auth=auth)

Solicitud preparada

Al aprender la biblioteca urllib, si es necesario configurar un encabezado de solicitud al enviar una solicitud, debe estar representado por un objeto de solicitud. En la biblioteca de solicitudes, hay una clase similar llamada Solicitud preparada.

from requests import Request,Session
url = 'http://httpbin.org/post'
data = {
	'name':'germey'
}
headers = {
	'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0'
}
s = Session()
req = Request('POST',url,data=data,headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)

Aquí se introduce el Request, luego se construye un objeto Request con los parámetros url, data y headers, en este momento es necesario llamar al método prepare_request( ) de la Sesión para convertirlo en un objeto Request Preparado, y luego llame al método send() para enviarlo. La ventaja de esto es que puede usar Request para tratar las solicitudes como objetos independientes, lo cual es muy conveniente para la programación de colas y se usará para construir una cola de solicitudes más adelante.

Digresión

Muchas personas que son nuevas en la industria informática o que se graduaron de carreras relacionadas con la informática han encontrado obstáculos en todas partes debido a la falta de experiencia práctica. Veamos dos conjuntos de datos:

  • Se espera que los graduados universitarios nacionales de 2023 alcancen los 11,58 millones, y la situación laboral es grave;

  • Según los datos publicados por la Semana Nacional de Publicidad de Seguridad en Redes, para el año 2027, la escasez de personal de seguridad en redes en mi país llegará a 3,27 millones.

    Por un lado, la situación laboral de los recién graduados es grave cada año y, por otro lado, existe una brecha de un millón de talentos en ciberseguridad.

El 9 de junio, se publicó oficialmente la edición de 2023 del Libro azul de empleo de MyCOS Research (que incluye el Informe de empleo de 2023 para estudiantes universitarios en China y el Informe de empleo para estudiantes de formación profesional superior en China en 2023).

Las 10 carreras principales con salario mensual más alto para graduados universitarios de 2022

El ingreso mensual de los estudiantes de pregrado en ciencias de la computación y de los estudiantes de automatización vocacional superior es relativamente alto. El ingreso mensual de la clase 2022 de licenciatura en informática y carreras de automatización vocacional superior es de 6.863 yuanes y 5.339 yuanes, respectivamente. Entre ellos, el salario inicial de los estudiantes de licenciatura en informática es básicamente el mismo que el de la clase 2021, y el ingreso mensual de los estudiantes de automatización vocacional superior ha aumentado significativamente.

Específicamente, dependiendo de la carrera, la carrera con un ingreso mensual más alto para estudiantes universitarios en 2022 es seguridad de la información (7579 yuanes). En comparación con la clase de 2018, las carreras universitarias relacionadas con la inteligencia artificial, como la ciencia y la tecnología electrónica, la automatización, tuvieron un buen desempeño y sus salarios iniciales aumentaron un 19 % en comparación con hace cinco años. Si bien la ciencia de datos y la tecnología de big data son especializaciones recientemente agregadas en los últimos años, han tenido un buen desempeño y se han clasificado entre las tres principales especializaciones con mayores ingresos mensuales medio año después de la graduación para la clase de estudiantes universitarios de 2022. La única carrera de humanidades y ciencias sociales que ingresó a la lista de los 10 mejores estudiantes mejor pagados hace cinco años, French ha salido del top 10.

“No hay seguridad nacional sin ciberseguridad”. En la actualidad, la seguridad de la red se ha elevado a la altura de la estrategia nacional y se ha convertido en uno de los factores más importantes que afectan la seguridad nacional y la estabilidad social.

Características de la industria de seguridad de redes

1. El salario de empleo es muy alto y aumenta rápidamente. En 2021, Liepin.com lanzó el salario de empleo más alto en la industria de seguridad de redes, ¡que es de 337,700 yuanes per cápita!

2. Hay una gran brecha de talento y muchas oportunidades de empleo

El 18 de septiembre de 2019, el sitio web oficial del "Gobierno Popular Central de la República Popular China" publicó: mi país necesita 1,4 millones de talentos en seguridad cibernética, pero las escuelas de todo el país capacitan a menos de 1,5 millones de personas cada año. El "Informe de seguridad cibernética para la primera mitad de 2021" de Liepin.com predice que la demanda de talentos en seguridad cibernética será de 3 millones en 2027, y solo hay 100,000 empleados actualmente involucrados en la industria de la seguridad cibernética.

La industria tiene mucho espacio para el desarrollo y muchos puestos de trabajo

Desde el establecimiento de la industria de seguridad de redes, se han agregado docenas de nuevos puestos en la industria de seguridad de redes: expertos en seguridad de redes, analistas de seguridad de redes, consultores de seguridad, ingenieros de seguridad de redes, arquitectos de seguridad, ingenieros de operación y mantenimiento de seguridad, ingenieros de penetración, administración de seguridad de la información. Ingeniero de seguridad de datos, ingeniero de operaciones de seguridad de redes, ingeniero de respuesta ante emergencias de seguridad de redes, evaluador de datos, gerente de productos de seguridad de redes, ingeniero de servicios de seguridad de redes, capacitador de seguridad de redes, auditor de seguridad de redes, ingeniero de análisis de inteligencia de amenazas, profesional de recuperación ante desastres, combate real ofensivo y defensivo profesionales...

Gran potencial de carrera

La especialización en seguridad de redes tiene características técnicas sólidas, especialmente el dominio de la arquitectura de red central y la tecnología de seguridad en el trabajo, lo que tiene una ventaja competitiva insustituible en el desarrollo profesional.

Con la mejora continua de la capacidad personal, el valor profesional del trabajo también aumentará con el enriquecimiento de la propia experiencia y la madurez de la operación del proyecto, y el espacio de apreciación es alcista en todo momento, que es la razón principal por la que es popular. con todos.

Hasta cierto punto, en el campo de la seguridad de la red, al igual que la profesión de médico, cuanto mayor sea, más popular se volverá. Debido a que la tecnología se vuelve más madura, el trabajo será naturalmente valorado, y la promoción y el aumento salarial son una cuestión. por supuesto.

Cómo aprender piratería y seguridad cibernética

Hoy, siempre que le des a mi artículo un pulgar hacia arriba, compartiré mi colección privada de materiales de aprendizaje de seguridad en línea contigo de forma gratuita, veamos qué hay allí.

1. Hoja de ruta de aprendizaje

También hay muchas cosas que aprender en ataque y defensa. He escrito todas las cosas específicas para aprender en la hoja de ruta anterior. Si puede aprenderlas, no tendrá problemas para conseguir un trabajo o tomar trabajos privados.

2. Videotutorial

Aunque hay muchos recursos de aprendizaje en Internet, básicamente están incompletos. Este es un video tutorial sobre seguridad cibernética grabado por mí. Tengo una explicación en video de apoyo para cada punto de conocimiento en la hoja de ruta anterior.

El contenido abarca el estudio de la ley de seguridad de redes, operación de seguridad de redes y otras evaluaciones de garantías, conceptos básicos de pruebas de penetración, explicación detallada de vulnerabilidades, conocimientos básicos de informática, etc., que son todos los contenidos de aprendizaje que se deben conocer al iniciarse en la seguridad de redes.

(Todo está empaquetado en una sola pieza y no se puede desplegar uno por uno. Hay más de 300 episodios en total)

Debido al espacio limitado, solo se muestra una parte de la información, debe hacer clic en el enlace a continuación para obtenerla

Juerga de CSDN: "Paquete de recursos de aprendizaje avanzado y introducción a la seguridad de redes y piratas informáticos" uso compartido gratuito

3. Documentos técnicos y libros electrónicos

Los documentos técnicos también están compilados por mí mismo, incluida mi experiencia y puntos técnicos de participación en operaciones de seguridad de red a gran escala, minería de vulnerabilidades CTF y SRC. También hay más de 200 libros electrónicos. Debido a la sensibilidad del contenido, no los mostraré uno por uno.

Debido al espacio limitado, solo se muestra una parte de la información, debe hacer clic en el enlace a continuación para obtenerla

Juerga de CSDN: "Paquete de recursos de aprendizaje avanzado y introducción a la seguridad de redes y piratas informáticos" uso compartido gratuito

4. Caja de herramientas, preguntas de la entrevista y código fuente

“Si quieres hacer un buen trabajo, primero debes afilar tus herramientas.” He resumido docenas de las herramientas de hackeo más populares para todos. El alcance de la cobertura se centra principalmente en la recopilación de información, las herramientas de piratería de Android, las herramientas de automatización, el phishing, etc. Los estudiantes interesados ​​no se lo deben perder.

También está el código fuente del caso y el conjunto de herramientas correspondiente mencionado en mi video, que se puede quitar si es necesario.

Debido al espacio limitado, solo se muestra una parte de la información, debe hacer clic en el enlace a continuación para obtenerla

Juerga de CSDN: "Paquete de recursos de aprendizaje avanzado y introducción a la seguridad de redes y piratas informáticos" uso compartido gratuito

Finalmente, hay preguntas de entrevistas sobre seguridad en Internet que he resuelto en los últimos años. Si está buscando un trabajo en seguridad en Internet, definitivamente lo ayudarán mucho.

Estas preguntas se encuentran a menudo en entrevistas con Sangfor, Qi Anxin, Tencent u otras empresas importantes. Si tiene buenas preguntas o buenas ideas, compártalas.

Análisis de referencia: sitio web oficial de Sangfor, sitio web oficial de Qi Anxin, Freebuf, csdn, etc.

Características del contenido: organización clara, incluida la representación gráfica, que es más fácil de entender.

Resumen de contenido: incluye intranet, sistema operativo, protocolo, prueba de penetración, servicio de seguridad, vulnerabilidad, inyección, XSS, CSRF, SSRF, carga de archivos, descarga de archivos, inclusión de archivos, XXE, vulnerabilidad lógica, herramienta, SQLmap, NMAP, BP, MSF…

Debido al espacio limitado, solo se muestra una parte de la información, debe hacer clic en el enlace a continuación para obtenerla

Juerga de CSDN: "Paquete de recursos de aprendizaje avanzado y introducción a la seguridad de redes y piratas informáticos" uso compartido gratuito

Supongo que te gusta

Origin blog.csdn.net/Python_0011/article/details/132020824
Recomendado
Clasificación