Estoy tratando de usar urllib2 para abrir la URL y enviar un texto de cookie específico al servidor. Por ejemplo, quiero abrir el sitio Resolver problemas de ajedrez , con una cookie específica, por ejemplo, búsqueda = 1. ¿Cómo lo hago?
Estoy intentando hacer lo siguiente:
import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")
Gracias por adelantado
cookievals
, utiliceopener.addheaders.append(('Cookie', "; ".join('%s=%s' % (k,v) for k,v in cookievals.items())))
.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)) # input-type values from the html form 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:
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.
fuente
CookieJar
instancia lo manejará por mí en todos los dominios relevantes a partir de ese momento.Es posible que desee echar un vistazo a la excelente biblioteca HTTP Python llamada Solicitudes . Hace que cada tarea que involucre HTTP sea un poco más fácil que urllib2. Desde la sección Cookies de la guía de inicio rápido:
>>> cookies = dict(cookies_are='working') >>> r = requests.get('http://httpbin.org/cookies', cookies=cookies) >>> r.text '{"cookies": {"cookies_are": "working"}}'
fuente
urllib3
, admite la agrupación de conexiones como urllib3 y persiste las cookies y los encabezados, consulteRequests Session
. ¡Es bonito!Utilice cookielib . La página de documentos vinculada proporciona ejemplos al final. También encontrará un tutorial aquí .
fuente
Esta respuesta no funciona ya que el
urllib2
módulo se ha dividido en varios módulos en Python 3. Necesita hacerfrom urllib import request opener = request.build_opener() opener.addheaders.append(('Cookie', 'cookiename=cookievalue')) f = opener.open("http://example.com/")
fuente