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 ответа:
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"}}'