Cookieはなじみのないものではなく、セッションと同様に、httpリクエストの前後の状態を維持できます。セッションとの違いは、Cookieデータはクライアントにのみ保存されることです。リクエストは、Cookieを処理するための対応するメソッドも提供します。
python requests module-sessionでは、リクエスト内のセッションオブジェクトがリクエスト間でCookieを保持できることがわかっているため、Cookieの使用が非常に簡単になります。メソッドレベルでリクエストを設定する場合は、次の例のように実行できます。
import requests
s = requests.session()
# ステップ1:リクエストにCookieを設定するリクエストを送信する
cookies =dict(cookies_are='cookie1')
# tips: http://httpbin.orgを使用してhttpリクエストとレスポンスをテストできます
r1 = s.get(url='http://httpbin.org/cookies', cookies=cookies)print(r1.text)
# ステップ2:リクエストを送信して、リクエストにCookieを再度設定します
cookies =dict(cookies_are='cookie2')
r2 = s.get(url='http://httpbin.org/cookies', cookies=cookies)print(r2.text)
運用結果
# r1.text
{" cookies":{"cookies_are":"cookie1"}}
# t2.text
{" cookies":{"cookies_are":"cookie2"}}
結果から、メソッドレベルのパラメータはリクエスト間で維持されないため、このメソッドではCookieが単一のリクエストに対してのみ機能することがわかります。これはリクエスト内のセッションオブジェクトのメカニズムであるため、ここでは繰り返しません。では、リクエスト間でCookieを保持したい場合はどうでしょうか。セッションオブジェクトのクロスリクエストメカニズムは、次のようにここでも適用できます。
import requests
s = requests.session()
s.cookies.update({'cookies_are':'cookie'})
r = s.get(url='http://httpbin.org/cookies')print(r.text)
言及する価値があるのは、Cookieを割り当てるために辞書を直接使用することに加えて、requestsは使用するRequestsCookieJarオブジェクトも提供します。その動作は辞書に似ていますが、インターフェイスはより完全で、クロスドメインおよびクロスパスの使用に適しています。公式ドキュメントの例を見てください。
import requests
jar = requests.cookies.RequestsCookieJar()
jar.set('tasty_cookie','yum', domain='httpbin.org', path='/cookies')
jar.set('gross_cookie','blech', domain='httpbin.org', path='/elsewhere')
url ='http://httpbin.org/cookies'
r = requests.get(url, cookies=jar)print(r.text)
運用結果
{" cookies":{"tasty_cookie":"yum"}}
結果から、RequestsCookieJarオブジェクトを使用して、さまざまな要求パスに従ってさまざまなCookieを送信する効果を実現し、Cookieの操作の柔軟性をさらに高めることがわかります。
参照文書
https://github.com/psf/requests/blob/master/requests/cookies.py
https://requests.readthedocs.io/en/master/user/quickstart/#cookies
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts