Python: urllib2 как отправить cookie с запросом urlopen

Я пытаюсь использовать urllib2 для открытия URL-адреса и отправки определенного файла cookie на сервер. Например. Я хочу открыть сайт Решить проблемы с шахматами, с определенным файлом cookie, например. поиск = 1. Как это сделать?

Я пытаюсь сделать следующее:

import urllib2
(need to add cookie to the request somehow)
urllib2.urlopen("http://chess-problems.prg")

Заранее спасибо

Ответ 1

Cookie - это еще один HTTP-заголовок.

import urllib2
opener = urllib2.build_opener()
opener.addheaders.append(('Cookie', 'cookiename=cookievalue'))
f = opener.open("http://example.com/")

См. примеры urllib2 для других способов добавления заголовков HTTP в ваш запрос.

Существует больше способов обработки файлов cookie. Некоторые модули, такие как cookielib, пытаются вести себя как веб-браузер - помните, какие файлы cookie вы получили ранее, и автоматически отправляете их снова в следующих запросах.

Ответ 2

Возможно использование cookielib.CookieJar может вам помочь. Например, при отправке на страницу, содержащую форму:

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()

EDIT:

После комментария Петра я немного поразмыслил. Из документов:

В классе CookieJar хранятся файлы cookie HTTP. Он извлекает файлы cookie из HTTP запросов и возвращает их в ответах HTTP. Примеры использования CookieJar при необходимости автоматически заканчивается использование файлов cookie. Подклассы также отвечает за хранение и извлечение файлов cookie из файла или базы данных.

Таким образом, любые запросы, которые вы делаете со своим экземпляром CookieJar, будут обрабатываться автоматически. Kinda, как ваш браузер::

Я могу говорить только по собственному опыту, а мой 99% -ный вариант использования файлов cookie - это получить куки файл, а затем отправить его со всеми последующими запросами в этом сеансе. Код выше обрабатывает только это, и он делает это прозрачно.

Ответ 3

Вы можете взглянуть на отличную библиотеку HTTP Python под названием Requests. Это делает каждую задачу, связанную с HTTP, немного проще, чем urllib2. Из раздела Cookies руководства по быстрому запуску:

Чтобы отправить свои собственные файлы cookie на сервер, вы можете использовать параметр cookie:

>>> cookies = dict(cookies_are='working')

>>> r = requests.get('http://httpbin.org/cookies', cookies=cookies)
>>> r.text
'{"cookies": {"cookies_are": "working"}}'

Ответ 4

Используйте cookielib. В конце страницы связанных ссылок содержатся примеры. Вы также найдете учебник здесь.