[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をフォローして頂けますと幸いです ^ ^。
最後までご覧頂きましてありがとうございました!






