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. В конце страницы связанных ссылок содержатся примеры. Вы также найдете учебник здесь.