2015/11/09更新

[Python] HTTP通信にCooki処理を追加して、はてなにログインする

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
今日は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ネタを中心に情報を発信しています。気になった方はぜひ、RSSTwitterをフォローして頂けますと幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。