obtener una página restringida después de iniciar sesión utilizando solicitudes, urllib2 python

Estoy intentando iniciar sesión en esta página usando solicitudes de python

headers = { 'content-type': 'application/x-www-form-urlencoded', 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36' } data = { 'username':myusername, 'password':mypassword, } r = requests.post(url,data=data,headers=headers) 

Intenté imprimir la respuesta devuelta a través de print r y la salida fue pero la página html fue de la página de inicio de sesión pero esperaba html de otra página a la que se nos redireccionará después del inicio de sesión.

El formulario de inicio de sesión contiene varios campos ocultos:

    

Lo más probable es que el primer campo, y quizás el segundo, se generen automáticamente y se vinculen a la sesión. Primero deberá cargar la página de inicio de sesión (mediante una sesión), analizar esos campos e incluirlos en su POST.

La razón por la que obtiene 200 respuestas es que el sitio redirige las solicitudes no autorizadas a la página de inicio de sesión; marque r.history , habrá una o más 302 respuestas en esa lista.

Puede usar BeautifulSoup para analizar esto, o usar robobrowser , que combina requests y BeautifulSoup, junto con un controlador de formularios dedicado para crear un marco similar a un navegador para navegar por un sitio web:

 from robobrowser import RoboBrowser browser = RoboBrowser(history=True, user_agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36') browser.open('http://selleraccounts.snapdeal.com/') form = browser.get_form(id='fm1') form['username'].value = myusername form['password'].value = mypassword browser.submit_form(form) 

Dos cosas: 1. El hecho de que el código de respuesta sea 200 para sus solicitudes de inicio de sesión no significa que tenga éxito. Podría ser que el desarrollador no esté siguiendo las pautas de REST por cualquier motivo y devuelva un 200 con el cuerpo que indica un error.

  1. Cuando intenté iniciar sesión en el sitio web que me proporcionaron con mis herramientas para desarrolladores de Chrome habilitadas, inspeccioné el tráfico y observé que el sitio web transmite más que solo el nombre de usuario y la contraseña. En concreto hay otros 4 campos:

     username:adb password:asdf lt:LT-1315009-vg7Xm5MTSfBYkGNuaiUbAFZqVZNmoP execution:e2s1 _eventId:submit submit:LOGIN 

Sospecho que algunos de ellos son tokens anti-CSRF, que tal vez deba eliminar de la página de inicio de sesión que recibió inicialmente, pero no creo que la solicitud de inicio de sesión se realice a menos que proporcione el valor correcto para cada uno de estos campos.