Login
  Days of Liris

2005/11/29

twisted.web.clientとプロキシサーバ

Tag: dev

wisted.web.clientはWebへのアクセスを提供するクラスです。標準のライブラリで言うhttplibに相当しますが,httplibが ブロッキングなのに対してtwisted.web.clientはtwistedなのでノンブロッキングです。ちなみに、 twisted.web2.clientはまだないです。でも、悲しいことにtwisted.web.clientはプロキシサーバに対応していません。 プロキシサーバを通さないと外にアクセスできないような環境ではうれしくないです。Webで調べても将来対応するのか,勝手にやってくれというスタンスなのか,よくわかりません。よくわからないものは自分でやっちゃうので、やっちゃいました(webclient.py)。

使いかたは,普通のやつと同じですが,proxy_host, proxy_portを指定します。ただ、1時間ぐらいで作ったので,getPageしか対応していません。downloadPageとかはだめ。 redirectに対応していません。あと、認証プロキシもやっていません。単に面倒だからです。こんな感じになります。

import os
import os.path
import sys
from twisted.internet import reactor
import webclient

def got_page(data):
print data
reactor.stop()


def got_error(failure):
print >> sys.stderr, "ERROR: " , failure.getErrorMessage()
reactor.stop()


if __name__ == "__main__":
import getopt
opts, args = getopt.getopt(sys.argv[1:], "h:p:n:")
for (k, v) in opts:
if k == "-p":
proxy_host = v
elif k == "-n":
proxy_port = v
url = args[0]
webclient.getPage(url, proxy_host = proxy_host, proxy_port = int(proxy_port)).addCallback(
got_page).addErrback(
got_error)
reactor.run()

うーん、twistedは楽チン。

webclient.py webclient.py
Size 1.6 kB - File type text/python-source
by liris last modified 2005-11-29 19:21

Captcha Image