はじめに
そもそもCookieを維持しなければならないAPIを使っているときに、 PythonのrequestsモジュールでCookieが維持できておらず、はまったことがはじまりでした。
requestsモジュールのSession
Pythonのrequestsモジュールでは、Sessionを利用することでCookieを維持できます。 Cookieの維持ができているか確認するためにhttpbin.orgのAPIを使います。 今回使うAPIを簡単に説明すると
/cookies/set: セットされているCookieを取得/cookies/set/{name}/{value}: 指定した{name}, {value}の組み合わせでCookieをセット
httpbin.orgですが、色々便利な使い方が見つかったら記事にできたら良いなと思っています。
以下、Sessionを利用したCookie維持のコードです。
import requests
# Sessionインスタンス作成
s = requests.Session()
# Name, Valueの組み合わせでCookieをセット
r = s.get('https://httpbin.org/cookies/set/Name/Value')
# セットされているCookieの取得
r = s.get('https://httpbin.org/cookies')
print(r.text)
これを実行すると
$ python request.py
{"cookies":{"Name":"Value"}}
ちゃんとCookieがセットされていることがわかります。
これcURLだとどうすんの…?
cURLでCookie維持したいときどうすんの?ってなったので調べてみました。 結局Session的なのではなく、Cookieをファイルに保存する方法になるようです。
オプション -c
オプション
-c でCookieを保存するファイルを指定
$ curl -c cookie.txt http://httpbin.org/cookies/set/Name/Value
オプション -b
Cookieを使うときは、オプション
-b で保存したファイルを指定
$ curl -b cookie.txt http://httpbin.org/cookies
{"cookies":{"Name":"Value"}}
当然ファイルを指定しなければ、Cookieがないことになります。
$ curl https://httpbin.org/cookies
{"cookies":{}}
まとめ
これでcURLでもログインしなければ見れないページが叩けたりしますね。
海津 純平