Python: Intentando enviar formularios utilizando solicitudes

Estoy intentando iniciar sesión en un sitio web para realizar un raspado con Python y la biblioteca de solicitudes. Estoy intentando lo siguiente (que no funciona):

import requests headers = {'User-Agent': 'Mozilla/5.0'} payload = {'username':'niceusername','password':'123456'} In [12]: r = requests.post('https://admin.example.com/login.php',headers=headers,data=payload) 

Pero nada, consiguiendo un redireccionamiento a la página de inicio de sesión. ¿Necesito abrir una sesión? ¿Estoy haciendo una solicitud POST incorrecta? ¿Necesito cargar las cookies? ¿O la sesión hace eso automáticamente? Estoy perdido aquí, se necesita ayuda y explicaciones.

El sitio web que estoy intentando iniciar sesión es PHP, ¿necesito “capturar el conjunto de cookies y establecer el encabezado de la cookie”? Si es así no tengo idea de cómo hacerlo. La página web es un formulario con lo siguiente (si es que ayuda): entrada: nombre de usuario ” contraseña ” id ‘:’ myform ‘,’ acción ‘: “login.php

Alguna información extra, tal vez puedas ver lo que me estoy perdiendo aquí ..

 In [13]: r.headers Out[13]: CaseInsensitiveDict({'content-encoding': 'gzip', 'transfer-encoding': 'chunked', 'set-cookie': 'PHPSESSID=v233mnt4malhed55lrpc5bp8o1; path=/', 'expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'vary': 'Accept-Encoding', 'server': 'nginx', 'connection': 'keep-alive', 'pragma': 'no-cache', 'cache-control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'date': 'Tue, 24 Dec 2013 10:50:44 GMT', 'content-type': 'text/html'}) In [14]: r.cookies Out[14]: <[Cookie(version=0, name='PHPSESSID', value='v233mnt4malhed55lrpc5bp8o1', port=None, port_specified=False, domain='admin.example.com', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={}, rfc2109=False)]> 

Realmente agradecería la ayuda, gracias!

Actualización, con respuesta gracias a atupal:

  import requests headers = {'User-Agent': 'Mozilla/5.0'} payload = {'username':'usr','pass':'123'} link = 'https://admin.example.com/login.php' session = requests.Session() resp = session.get(link,headers=headers) # did this for first to get the cookies from the page, stored them with next line: cookies = requests.utils.cookiejar_from_dict(requests.utils.dict_from_cookiejar(session.cookies)) resp = session.post(link,headers=headers,data=payload,cookies =cookies) #used firebug to check POST data, password, was actually 'pass', under 'net' in param. #and to move forward from here after is: session.get(link) 

Puedes usar el objeto Session

 import requests headers = {'User-Agent': 'Mozilla/5.0'} payload = {'username':'niceusername','password':'123456'} session = requests.Session() session.post('https://admin.example.com/login.php',headers=headers,data=payload) # the session instance holds the cookie. So use it to get/post later. # eg session.get('https://example.com/profile') 

Envíe una solicitud POST con el tipo de contenido = ‘datos de formulario’:

 import requests files = { 'username': (None, 'myusername'), 'password': (None, 'mypassword'), } response = requests.post('https://example.com/abc', files=files)