ichirin2501's diary

いっちりーん。

urllib2周辺は触りたくないですね

またpythonでネットワークプログラミングする機会があったのだけど、
urllib2付近の処理が面倒です。いい加減、処理をまとめようと思って作成してみた。
複雑なことは出来ないけど、簡単なことならこれで十分。
Cookieはデフォルトで機能します。
POSTするデータは辞書のまま渡す、わざわざurlencodeしなくてもいい。

# -*- coding: utf-8 -*-
# python 2.7
import urllib2
from cookielib import CookieJar
from urllib import urlencode

class request():
    def __init__(self, debug=None):
        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(CookieJar()))
        if debug :
            for h in self.opener.handlers:
                if isinstance(h, urllib2.HTTPHandler):
                    h._debuglevel = 1
                elif isinstance(h, urllib2.HTTPSHandler):
                    h._debuglevel = 1

    def get(self, url, _headers={}):
        req = urllib2.Request(url, headers=_headers)
        return self.opener.open(req)

    def post(self, url, _data={}, _headers={}):
        req = urllib2.Request(url, data=urlencode(_data), headers=_headers)
        return self.opener.open(req)


header = {
    'User-Agent' : 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16'
}

url = "https://www.hatena.ne.jp/login"
r = request(debug=True)
res = r.post(url, {'name':'ichirin2501', 'password':'****'}, header)
print res.read()