HDEラボの桜井です。
昨日のプログラムに、ちょっとだけ機能を追加してみましょう。
追加する機能は、プロキシサーバよりさらに先にあるプロキシサーバ(上位プロキシ)を
経由してインターネットにつなげるものです。
本当はhttpsのプロキシもやりたいんだけどなぁ...。
昨日のプログラムに、ちょっとだけ機能を追加してみましょう。
追加する機能は、プロキシサーバよりさらに先にあるプロキシサーバ(上位プロキシ)を
経由してインターネットにつなげるものです。
# -*- coding: utf-8 -*- from twisted.web import http, proxy from twisted.internet import reactor, ssl from twisted.python import log import sys import urlparse # とりあえずログを標準出力へ log.startLogging(sys.stdout) # 上位プロキシ設定 proxyHost = "192.168.0.1" proxyPort = 8080 # プロキシリクエストのクラス class MyProxyRequest(proxy.ProxyRequest): # processメソッドを継承 def process(self): parsed = urlparse.urlparse(self.uri) protocol = parsed[0] host = parsed[1] print self.method port = self.ports[protocol] if ':' in host: host, port = host.split(':') port = int(port) rest = urlparse.urlunparse(('', '') + parsed[2:]) if not rest: rest = rest + '/' class_ = self.protocols[protocol] headers = self.getAllHeaders().copy() if 'host' not in headers: headers['host'] = host self.content.seek(0, 0) s = self.content.read() # 上位プロキシの設定がある場合はこちら if proxyHost != "" and proxyPort != 0: clientFactory = class_(self.method, self.uri, self.clientproto, headers, s, self) self.reactor.connectTCP(proxyHost, proxyPort, clientFactory) # プロキシが必要ない場合はこちら else: clientFactory = class_(self.method, rest, self.clientproto, headers, s, self) self.reactor.connectTCP(host, port, clientFactory) # プロキシクラスを継承 class MyProxy(proxy.Proxy): requestFactory = MyProxyRequest # HTTPプロキシサーバのクラス class MyProxyFactory(http.HTTPFactory): protocol = MyProxy # 実行 reactor.listenTCP(8080, MyProxyFactory()) reactor.run
本当はhttpsのプロキシもやりたいんだけどなぁ...。
Leave a comment