Pythonでプロキシを越える

 お世話になっております。

 会社のネットワークは、プロキシサーバーを経由しないと外部サイトを参照できないようになっています。セキュリティ対策としては有効ですが、クラウドの恩恵を受けるには一工夫が必要です。今日は、python-twitter*1でプロキシサーバー突破に成功しました。
 単純にプロキシサーバーを突破するには、こちらを御覧下さい。
 しかし、残念ながらこの方法はpython-twitterには使えません。python-twitterは自分でurllib2.OpenerDirectorを構成しているからです。twitter.Api._GetOpener()が返すOpenerDirectorへ、ProxyHandlerとProxyBasicAuthHandlerを追加しなければいけません。対応したプログラムを以下に記載します。

# -*- coding: shift_jis -*-

import twitter

PROXY_SERVER = ''
USER = ''
PASS = ''


class MyApi(twitter.Api):
    def _GetOpener(self, url, username=None, password=None):
        opener = twitter.Api._GetOpener(self, url, username, password)

        urllib2 = twitter.urllib2
        p_h = urllib2.ProxyHandler({'http': PROXY_SERVER})
        opener.add_handler(p_h)
        passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
        passmgr.add_password(None, PROXY_SERVER, USER, PASS)
        a_h = urllib2.ProxyBasicAuthHandler(passmgr)
        opener.add_handler(a_h)

        return opener

 オブジェクト指向をうまく使えたと思います。

 これで、会社からもコンソール経由でTwitterを使えるようになりました。こっそりとつぶやけるようになったというわけです。

以上