Tal vez usar cookielib.CookieJar pueda ayudarte. Por ejemplo, al publicar en una página que contiene un formulario:
import urllib2
import urllib
from cookielib import CookieJar
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
formdata = { "username" : username, "password": password, "form-id" : "1234" }
data_encoded = urllib.urlencode(formdata)
response = opener.open("https://page.com/login.php", data_encoded)
content = response.read()
EDITAR:
Después del comentario de Piotr, me extenderé un poco. De los documentos:
La clase CookieJar almacena cookies HTTP. Extrae cookies de solicitudes HTTP y las devuelve en respuestas HTTP. Las instancias de CookieJar caducan automáticamente las cookies contenidas cuando es necesario. Las subclases también son responsables de almacenar y recuperar cookies de un archivo o base de datos.
Entonces, independientemente de las solicitudes que realice con su CookieJar
instancia, todas las cookies se manejarán automáticamente. Un poco como lo hace su navegador :)
Solo puedo hablar de mi propia experiencia y mi caso de uso del 99% para las cookies es recibir una cookie y luego tener que enviarla con todas las solicitudes posteriores en esa sesión. El código anterior maneja precisamente eso, y lo hace de forma transparente.
cookievals
, utiliceopener.addheaders.append(('Cookie', "; ".join('%s=%s' % (k,v) for k,v in cookievals.items())))
.