[Python] HTTP通信にCooki処理を追加して、はてなにログインする
こんにちは、@yoheiMuneです。
今日はpython3系のurllibモジュールを使って、Cookie処理を行い、はてなサービスへログインする方法をブログに書きたいと思います。
urllibモジュールを使ったHTTP(HTTPS)通信は、デフォルトではCookieは無視されます。しかし以下のように実装することで、サーバーからSet-Cookieされた内容を次のリクエストに使うことができ、その機能を使うことでログイン処理やその後の認証が必要なページの閲覧をできるようになります。
Python2とPython3でHTTP POST+Cookie処理の比較
PythonでCookieを使ってWebサイトにログイン
Pythonのurllib.requestにてCookieを利用する
最後になりますが本ブログでは、フロントエンドのネタやPythonネタを中心に情報を発信しています。気になった方はぜひ、RSSやTwitterをフォローして頂けますと幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
今日はpython3系のurllibモジュールを使って、Cookie処理を行い、はてなサービスへログインする方法をブログに書きたいと思います。
urllibモジュールを使ってはてなへログインする
※ 今回はpython3系のみ動作する記事です。python2系で対応したい場合は後続の参照リンクをご確認ください。
urllibモジュールを使ったHTTP(HTTPS)通信は、デフォルトではCookieは無視されます。しかし以下のように実装することで、サーバーからSet-Cookieされた内容を次のリクエストに使うことができ、その機能を使うことでログイン処理やその後の認証が必要なページの閲覧をできるようになります。
# -*- coding: utf-8 -*- # Cookieの扱い # はてなブログにログインする from urllib.request import build_opener, HTTPCookieProcessor from urllib.parse import urlencode from http.cookiejar import CookieJar import pprint # HTTP通信時にCookie処理を有効化します # Cookieをファイル保存するバージョンもあります。詳細は後ろの参照リンクへ。 opener = build_opener(HTTPCookieProcessor(CookieJar())) # 認証用のユーザーIDとパスワードを指定します name, pwd = '**your username**', '**your password**' # ログインに使う送信データを作ります post = { 'name': name, 'password': pwd } data = urlencode(post).encode('utf-8') # はてなサービスにログインします res = opener.open('https://www.hatena.ne.jp/login', data) # HTTPResponseヘッダーを表示しています # 中にSet-Cookieのヘッダーがあることがわかります pprint.pprint(res.getheaders()) res.close() # 認証が必要なページを開いてみます # ここではブログの編集画面を開きます # もし認証に失敗している場合は、404エラーとなるページで、 # 認証に成功している場合はHTMLファイルが返ってきます url = "http://d.hatena.ne.jp/%s/edit" % name res = opener.open(url) with open('out.html', 'wb') as f: f.write(res.read()) res.close()ここでのポイントは
HTTPCookieProcessor
を使うところで、これを利用することで各リクエスト/レスポンスでCookieの受け渡しができるようになります。参考URL
これを実装する上で、以下のリンクを参照させていただきました。ありがとうございます。Python2とPython3でHTTP POST+Cookie処理の比較
PythonでCookieを使ってWebサイトにログイン
Pythonのurllib.requestにてCookieを利用する
最後に
今回はPythonを用いて認証が必要なページにアクセスする方法を書きました。実際のところははてなサービスへログインしたい訳ではなく、認証が必要なページをクローリングできるようにしたく、この実装に取り組んだ次第でした。最後になりますが本ブログでは、フロントエンドのネタやPythonネタを中心に情報を発信しています。気になった方はぜひ、RSSやTwitterをフォローして頂けますと幸いです ^ ^。
最後までご覧頂きましてありがとうございました!