Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Qué significa el inicio de sesión simulado del rastreador de Python?

¿Qué significa el inicio de sesión simulado del rastreador de Python?

Algunos sitios web requieren iniciar sesión para capturar la información requerida. En este caso, puede diseñar un rastreador para simular el inicio de sesión. El principio es utilizar la cookie del navegador.

A. Navegador El proceso de acceso al servidor:

(1) El navegador (cliente) envía una solicitud HTTP (solicitud HTTP) al servidor web. El proceso de acceso del navegador al servidor:

(1) El navegador (cliente) envía una solicitud HTTP (solicitud HTTP) al servidor web

(2) El servidor web; recibe la solicitud y la envía de vuelta. Mensaje de respuesta (Respuesta HTTP);

(3) El navegador analiza el contenido y lo presenta al usuario.

En segundo lugar, utilice Fiddler para ver la información del comportamiento del navegador:

Mensaje de solicitud HTTP:

(1) Línea de inicio: incluido el método de solicitud, el recurso solicitado y el número de versión del protocolo HTTP

La solicitud GET aquí no tiene cuerpo de mensaje, por lo que no hay otros datos en la línea en blanco después del encabezado del mensaje.

(2) Encabezado del mensaje: contiene varios atributos

(3) Línea en blanco después del final del encabezado del mensaje

(4) Cuerpo del mensaje opcional: Contiene datos

Mensaje de respuesta HTTP:

(1) Línea de inicio: incluida la versión del protocolo HTTP, URL / inicio de sesión / correo electrónico, el contenido se encuentra en la parte inferior del cuerpo del mensaje.

También puede ver el contenido del POST en la pestaña Formularios web de Fiddler, como se muestra a continuación:

Puede encontrar que no solo está el número de cuenta (correo electrónico) y la contraseña. (contraseña) en el mensaje, de hecho, también hay valores _xsrf (devuelve el rol específico visto) y Remember_me ("recordarme" en la interfaz de inicio de sesión).

Luego puedes simular un inicio de sesión enviando la misma información en un rastreador de Python.

Aparecerá un elemento en la información enviada: _xsrf, cuyo valor es 2fc4ab0f0f144c2e478c436fe3160443

Este elemento es en realidad la información enviada por la página de inicio de sesión de conocimientos/#signin al acceder a esta página. es visible en el código fuente del navegador:

Por lo tanto, primero debe obtener este valor _xsrf de la URL de inicio de sesión,

y luego publicarlo junto con la información de cuenta, contraseña, etc. . , a la URL /login/email que realmente recibe la solicitud.

(2) Obtenga el valor de _xsrf:

Obtenga la URL de inicio de sesión /#signin y obtenga el valor de _xsrf del contenido.

Expresión regular.

(3) Enviar solicitud:

xsrf = valor _xsrf obtenido

datos = {"email": "xxx", "contraseña":" xxx" ,"_xsrf":xsrf}

login = s.post(loginURL, data = data, headers = headers)

loginURL: Es el POST real de la URL, no necesariamente Equivalente a la URL de la página de inicio de sesión

(4) Obtener la página de inicio de sesión:

respuesta = s.get(getURL, cookies = login. cookies, headers = headers)

getURL: la página web que se capturará después de iniciar sesión;

login.cookie: la información de la cookie obtenida al iniciar sesión y almacenada al iniciar sesión.

(5) Contenido de salida:

Imprimir respuesta.content

V. Código específico:

[python]?view simple? copiar

#?-*-?coding:utf-8?-*-?

#?Autor: Simon?

#?Hora de actualización: 2016 17 de marzo, 17:35:35?

#?Función:¿Se utiliza el rastreador de inicio de sesión simulado, urllib y solicitudes...?

import?urllib?

¿importar?urllib2?

¿importar?solicitudes?

¿importar?re?

encabezados?=?{'User-Agent':'Mozilla /5.0 ?(Windows?NT?6.2)?AppleWebKit/535.11?(KHTML,?like?Gecko)?Chrome/17.0.963.12?Safari/535.11'}?

def?get_xsrf():? p>

¿primera URL?=?"?/#signin"?

solicitud?=?urllib2.Request(primeraURL,encabezados?=?encabezados)?

respuesta ?= ?urllib2.urlopen(solicitud)?

contenido?=?response.read()?

patrón?=?re.compile(r'name="_xsrf"? valor= "(. *?)" target="_xsrf"?/>',re.S)?

_xsrf?=?re.findall(patrón,contenido)?

return_xsrf [0]?

def?login(par1):?

s?=?requests.session()?

afterURL?=?" /explorar "#? ¿La página posterior al inicio de sesión que desea rastrear?

LoginURL?=?" /login/email"?/login/email"?#?

login?=?s.post(loginURL,?data?=?par1, ?headers?=?headers)?#?Enviar información de inicio de sesión y devolver respuesta (con cookies)?

response?=?s.get(afterURL,?cookies?=?login.cookies,?headers? =?headers)#?¿Usar cookies anteriores para obtener información de respuesta después de iniciar sesión?

return?response.content?

xsrf?=?get_xsrf()?

< El valor de p>print?"_xsrf es: "?

datos?=?{"email": "xxx", "contraseña": "xxx", "_xsrf":xsrf}?

print?login(data)?

Sexto, agregue:

Después de experimentar con Knowledge.com, descubrí que no parece ser necesario enviar el Valor _xsrf aquí

Pero algunos sitios web requieren que se envíe dicho valor al iniciar sesión, por lo que puede utilizar el método anterior