web-dev-qa-db-ja.com

真剣にシンプルpython HTTPプロキシ?

私はいたるところを見て、何百万ものpythonプロキシサーバーを見つけましたが、私が望むものを正確に実行するものはありません(私は思う:s)

私はpython一般的にかなりの経験がありましたが、HTTPプロトコルの深い暗黒の秘密の世界にはまったく新しい人です。

私が役に立つと思うのは、接続できる非常に単純なプロキシの例で、渡されたアドレスに接続しようとします。

また、私が混乱させているのは、隠されたものがしていることすべてです。クラスがBaseHTTPServer.BaseHTTPRequestHandlerを継承する場合、ページが要求されたときに正確に何が起こるか、私が見つけた多くの例のように、パス変数への参照がないと突然急になります! self.pathは関数で使用されます。それは継承されていると仮定していますが、どのように使用されたパスになりますか?

私の問題に対する私の考えはおそらくスクランブルされているので、それがあまり意味をなさない場合は申し訳ありません:(

あなたが私の質問をより明確にする何かを考えることができるなら、私はそれを追加することを提案してください。 xxx

編集:

また、プロキシがリクエストを処理し、ページ(この時点でデータを読み取り/変更する方法)をリクエストし、それを元のリクエスタに渡す詳細なプロセスの説明へのリンクは大歓迎ですxxxx

23
jma

「接続可能で、渡されたアドレスに接続しようとする非常に単純なプロキシの例」これは実質的にHTTPプロキシの定義です。

ここにreally簡単なプロキシの例があります: http://effbot.org/librarybook/simplehttpserver.htm

その中心はわずか3行です。

class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.copyfile(urllib.urlopen(self.path), self.wfile)

GET要求への応答で、パス内のURLを開くSimpleHTTPRequestHandlerです(通常、プロキシへの要求は「GET http://example.com/ 」、「GET /index.html」とは異なります)。次に、そのURLから読み取ることができるものを応答にコピーします。

これはreally最小限であることに注意してください。ヘッダーをまったく扱いません、私は信じています。

ところで:pathhttp://docs.python.org/library/basehttpserver.html に文書化されています。 do*メソッドが呼び出される前に設定されました。

31

twisted Wikiから

from twisted.web import proxy, http
from twisted.internet import reactor
from twisted.python import log
import sys
log.startLogging(sys.stdout)

class ProxyFactory(http.HTTPFactory):
    protocol = proxy.Proxy

reactor.listenTCP(8080, ProxyFactory())
reactor.run()
14
sal

proxpy かなり有望に見えますが、リクエストとレスポンスを微調整するのは非常に簡単です。

4
Dima Tisnek