httpプロトコル自体はステートレスです。リクエスト間の状態を維持するために、セッションメカニズムとCookieメカニズムがあります。リクエストは、それらを操作するための対応するメソッドも提供します。
リクエスト内のセッションオブジェクトを使用すると、HTTPリクエスト全体で特定のパラメータを維持できます。つまり、同じセッションオブジェクトによって送信されるリクエストヘッダーには、指定されたパラメータが含まれます。もちろん、最も一般的なアプリケーションは、後続の一連の要求でCookieを保持できることです。
以下では、公式ドキュメントの例を通じて使用方法を学びます。
import requests
s = requests.Session()
# ステップ1:リクエストにCookieを設定するリクエストを送信する
# tips: http://httpbin.orgを使用してhttpリクエストとレスポンスをテストできます
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# ステップ2:別のリクエストを送信して、現在のリクエストのCookieを表示します
r = s.get("http://httpbin.org/cookies")print(r.text)
運用結果
{" cookies":{"sessioncookie":"123456789"}}
結果から、2番目のリクエストには最初のリクエストで設定されたCookieが既に含まれていることがわかります。つまり、Cookieを保持する目的はセッションを通じて達成されます。この例では、requests.Session()オブジェクトが作成され、これを介してhttpリクエスト操作が実行されます。これは、基本的にrequests.request()と同様です。
セッションはリクエスト間の継続性を提供するため、クロスリクエストパラメータと非クロスリクエストパラメータには違いがあります。つまり、特定のパラメータを持つすべてのリクエストが必要な場合もあれば、一時的なパラメータを持つ単一のリクエストだけが必要な場合もあります。次の例で使用方法を学びます。
import requests
s = requests.Session()
s.headers.update({'x-test':'true'})
# both 'x-test' and 'x-test2' are sent
r1 = s.get('http://httpbin.org/headers', headers={'x-test2':'true'})print(r1.text)
# ' x-test' is sent
r2 = s.get('http://httpbin.org/headers')print(r2.text)
運用結果
# r1.text
{" headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Host":"httpbin.org","User-Agent":"python-requests/2.22.0","X-Amzn-Trace-Id":"Root=1-5e91656f-b99f14a4d6f47f9e55a90bb4","X-Test":"true","X-Test2":"true"}}
# r2.text
{" headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Host":"httpbin.org","User-Agent":"python-requests/2.22.0","X-Amzn-Trace-Id":"Root=1-5e91656f-e9741db4c2ca2fd6e0628396","X-Test":"true"}}
結果から、2つの結論を導き出すことができます。
セッションは、リクエストメソッドのデフォルトデータを提供できます。たとえば、最初のリクエストの{'x-test': 'true'}がデフォルトデータであり、この時点でのデフォルトデータはクロスリクエストパラメータです。
メソッドレベルのパラメータはリクエスト間で維持されません。たとえば、2番目のリクエストはheaders = {'x-test2': 'true'}を伝送せず、返される結果に{'x-test2': 'true'はありません。 }、最初のリクエスト後にパラメータが保持されていないことを示します。
参考資料
https://github.com/psf/requests/blob/master/requests/sessions.py
https://requests.readthedocs.io/en/master/user/advanced/#session-objects
以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。
Recommended Posts