web-dev-qa-db-ja.com

HTTPリクエストを作成しながらpythonでセッションを維持する

pythonスクリプトを作成して、同じサイトに複数のHTTPリクエストを送信する必要があります。間違っていない限り(そして、私がそうである可能性が高い場合))、urllibはすべてのリクエストに対して再認証を行います。理由から、 tに入ると、一度認証を行い、残りの要求にそのセッションを使用できるようにする必要があります。

python 2.3.4を使用しています。

26
Hector Scout

認証を維持したい場合は、Cookieを再利用する必要があります。 python 2.3.4でurllib2が利用できるかどうかはわかりませんが、次の例はその方法です。

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)
25
Nadia Alramli

Requests ライブラリを使用します。 http://docs.python-requests.org/en/latest/user/advanced/#session-objects から:

Sessionオブジェクトを使用すると、リクエスト間で特定のパラメータを永続化できます。また、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"}}'
29
Piotr Dobrogost

Python 2

これがCookieベースの認証である場合は、 HTTPCookieProcessor を使用します。

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

これがHTTP認証の場合は、 basicまたはdigest 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.requesthttp.cookiejar に移動されました。

16
lispmachine