Подтвердить что ты не робот

Сохранение сеанса в python при выполнении HTTP-запросов

Мне нужно написать python script, который делает несколько HTTP-запросов одним и тем же сайтом. Если я не ошибаюсь (и, возможно, очень хорошо), urllib повторно проверяет подлинность для каждого запроса. По причинам, по которым я не буду входить, мне нужно иметь возможность аутентифицироваться один раз, а затем использовать этот сеанс для остальных моих запросов.

Я использую python 2.3.4

4b9b3361

Ответ 1

Если вы хотите сохранить аутентификацию, вам нужно повторно использовать файл cookie. Я не уверен, что urllib2 доступен в python 2.3.4, но вот пример того, как это сделать:

req1 = urllib2.Request(url1)
response = urllib2.urlopen(req1)
cookie = response.headers.get('Set-Cookie')

# Use the cookie is subsequent requests
req2 = urllib2.Request(url2)
req2.add_header('cookie', cookie)
response = urllib2.urlopen(req2)

Ответ 2

Используйте Requests библиотеку. Из http://docs.python-requests.org/en/latest/user/advanced/#session-objects:

Объект Session позволяет вам сохранять определенные параметры в Запросы. Он также сохраняет файлы cookie по всем запросам, сделанным из Экземпляр сеанса.

s = requests.session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")

print r.text
# '{"cookies": {"sessioncookie": "123456789"}}'

Ответ 3

Python 2

Если это проверка подлинности на основе файлов cookie, используйте HTTPCookieProcessor:

import cookielib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")

Если это HTTP-аутентификация, используйте базовый или дайджест AuthHandler:

import urllib2
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
                          uri='https://mahler:8092/site-updates.py',
                          user='klem',
                          passwd='kadidd!ehopper')
opener = urllib2.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib2.install_opener(opener)
urllib2.urlopen('http://www.example.com/login.html')

... и используйте тот же самый открыватель для каждого запроса.

Python 3

В Python3 urllib2 и cookielib были перемещены в http.request и http.cookiejar соответственно.