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


Я пытаюсь использовать urllib2, чтобы открыть url и отправить определенный текст cookie на сервер. Например, я хочу открыть сайт решать шахматные задачи, С ОПРЕДЕЛЕННЫМ файлом cookie, например search=1. Как мне это сделать?

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

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

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

4 80

4 ответа:

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

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

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

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

может быть, используя 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 хранит http-файлы cookie. Он извлекает файлы cookie из HTTP запрашивает и возвращает их в HTTP-ответах. CookieJar экземпляры автоматически истекает срок действия содержащихся куки, когда это необходимо. Подклассы являются также ответственный за хранение и извлечение файлов cookie из файла или база данных.

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

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

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

для отправки собственных файлов cookie на сервер можно использовать параметр cookies:

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

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

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