Python создает файлы cookie, а затем загружает страницу с файлами cookie - PullRequest
3 голосов
/ 03 декабря 2010


Я хотел бы получить доступ к веб-странице из программы Python.Я должен установить куки для загрузки страницы.
Я использовал библиотеку httplib2, но я не нашел, как добавить свои собственные куки

resp_headers, content = h.request("http://www.theURL.com", "GET")

Как мне создать куки с правильным именемзначение, добавить его в функцию, а затем загрузить страницу?
Спасибо

Ответы [ 3 ]

12 голосов
/ 03 декабря 2010

С http://code.google.com/p/httplib2/wiki/Examples надеюсь поможет)

Печенье

При автоматизации чего-либо вам часто нужно «войти», чтобы поддерживать какую-то сессию / состояние с сервером. Иногда это достигается с помощью аутентификации на основе форм и файлов cookie. Вы публикуете форму на сервере, и она отвечает cookie во входящем заголовке HTTP. Вам необходимо передавать этот cookie обратно на сервер в последующих запросах, чтобы поддерживать состояние или поддерживать сеанс.

Вот пример того, как обращаться с куки-файлами при создании HTTP-сообщения.

Сначала давайте импортируем модули, которые мы будем использовать:

import urllib
import httplib2

Теперь давайте определим данные, которые нам понадобятся. В этом случае мы создаем пост в форме с двумя полями, представляющими имя пользователя и пароль.

url = 'http://www.example.com/login'   
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'}
headers = {'Content-type': 'application/x-www-form-urlencoded'}

Теперь мы можем отправить HTTP-запрос:

http = httplib2.Http()
response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body))

На данный момент наша переменная "response" содержит словарь полей заголовка HTTP, которые были возвращены сервером. Если cookie был возвращен, вы увидите поле «set-cookie», содержащее значение cookie. Мы хотим взять это значение и поместить его в исходящий HTTP-заголовок для наших последующих запросов:

headers['Cookie'] = response['set-cookie']

Теперь мы можем отправить запрос, используя этот заголовок, и он будет содержать cookie, чтобы сервер мог нас узнать.

Итак ... вот и все в сценарии. Мы заходим на сайт и затем делаем еще один запрос, используя полученный нами файл cookie:

#!/usr/bin/env python

import urllib
import httplib2

http = httplib2.Http()

url = 'http://www.example.com/login'   
body = {'USERNAME': 'foo', 'PASSWORD': 'bar'}
headers = {'Content-type': 'application/x-www-form-urlencoded'}
response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body))

headers = {'Cookie': response['set-cookie']}

url = 'http://www.example.com/home'   
response, content = http.request(url, 'GET', headers=headers)
6 голосов
/ 03 декабря 2010
http = httplib2.Http()
# get cookie_value here
headers = {'Cookie':cookie_value}
response, content = http.request("http://www.theURL.com", 'GET', headers=headers)

Вы можете добавить другие параметры заголовка, чтобы указать другие параметры HTTP-запроса.

0 голосов
/ 16 ноября 2017

Вы также можете использовать только urllib2 library

        import urllib2

        opener = urllib2.build_opener()
        opener.addheaders.append(('Cookie', 'cookie1=value1;cookie2=value2'))
        f = opener.open("http://www.example.com/")
        the_page_html = f.read()
...