pythonのcURLライブラリ「PycURL」にて、
ログイン認証を経てHTMLなりjsonなりのレスポンスを受け取る方法。
要はどうやってcookieを保存して、cookieを添えたリクエストを送るのかと言うお話です。
PycURLの基本
こちらが大変参考になります。
インストールから各種HTTPメソッドの送り方など。
お世話になりました。
PycURLでHTTPリクエストあれこれ
ログイン(cooikeの保存)
ログインして、そのcookieを保存するには以下の様にして行います。
(簡略化のため、例外処理・UserAgent・タイムアウトなど一切無視します。)
import pycurl
import io
curl = pycurl.Curl()
curl.setopt(pycurl.URL,'https://www.xxx.com/login.php' )
curl.setopt(pycurl.POST, 1)
curl.setopt(pycurl.HTTPPOST, [('email', 'qqq@ppp'), ('pass', 'qqqppp')])
curl.setopt(pycurl.COOKIEJAR,'cookie.txt')
# 以下2行は、コマンドラインにレスポンスを表示させないための記述。本質ではない。
b = io.BytesIO()
curl.setopt(pycurl.WRITEFUNCTION, b.write)
curl.perform()
ここで大切なことは、
「ログインした時のcookieを'./cookie.txt'に保存して」
と言うオプションを加えるには、下記の様に記すということです。
curl.setopt(pycurl.COOKIEJAR,'cookie.txt')
後ほど、このcookieを添えて、ログイン認証が必要なページに対してリクエストを送ります。
リクエスト送信先、およびパラメータ名は、
ログインページのソースを参照するか、通信履歴(chromeの検証→Networkタブ)から調べると良いと思います。
また、ログインに必要なパラメータが増える場合、リストの要素をそのまま増やせば良いです。
curl.setopt(pycurl.URL,'https://www.xxx.com/login.php' )
curl.setopt(pycurl.POST, 1)
curl.setopt(pycurl.HTTPPOST, [('para1', 'aaa'), ('para2', 'bbb'), ('para3', 'ccc'), ...])
ログイン認証が必要なページのレスポンスを受け取る
ログインが必要なxxx.comのmainページのHTMLを受け取る想定で記します。
import pycurl
import io
curl = pycurl.Curl()
curl.setopt(pycurl.URL,'https://www.xxx.com/main' )
curl.setopt(pycurl.COOKIEFILE,'cookie.txt')
b = io.BytesIO()
curl.setopt(pycurl.WRITEFUNCTION, b.write)
try:
curl.perform()
ret = b.getvalue()
http_code = curl.getinfo(pycurl.HTTP_CODE)
except Exception as e:
ret = str(e)
ここで大切なことは、
ログインを経て生成されたcookie.txtを添えてリクエストを送るには、
curl.setopt(pycurl.COOKIEFILE,'cookie.txt')
と記述すると言うことです。
cookieを保存するときは pycurl.COOKIEJAR
cookieを使用するときは pycurl.COOKIEFILE
次に、レスポンスを受け取ります。
b = io.BytesIO()
curl.setopt(pycurl.WRITEFUNCTION, b.write)
ret = b.getvalue()
これでret内にはmainページのHTMLがstr型で格納されていて、他の変数同様加工が可能です。
当然jsonをリクエストすることも可能です。
その場合受け取るレスポンスはstr型のため、jsonモジュールなどでデコードします。