1

私はpythonが初めてです。私はツイストから始めています。Twisted のドキュメントで見たように、これだけでプロキシ サーバーを作成できます。

class MyProxy(proxy.Proxy):
    pass

class ProxyFactory(http.HTTPFactory):
    protocol = MyProxy

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

ProxyFactory::protocolメンバー変数のように見えますか?しかしMyProxy、タイプ名であり、それがテンプレートの一種なのかわかりませんか? それ以外の場合、どのように型を変数に割り当てることができますか?

私が実際に達成したいのは、特定のエンドポイントへのリクエストを単純に拒否することです。オーバーライドを考えていましたがbuildProtocol、指定された引数addrは常に 127.0.0.1 です

4

1 に答える 1

3

ProxyFactory.protocolPython クラス属性です。Python は動的に型付けされた言語であるため、変数やクラスの定義方法が Java などよりも柔軟です。

MyProxy は Proxy サブクラスの空のクラスであり、proxy.Proxy でデフォルトで提供されるものに対する動作を定義しません。おそらくあなたがしなければならないこと (私は Twisted 内部の専門家ではありません) は、proxy.Proxy クラスのドキュメントを調べ、いくつかのメソッド関数を MyProxy で再定義してオーバーライドし、それらのメソッドが探しているロジックを実行するようにすることです。

Twisted API ドキュメントのソース コードを見ると、受信 HTTP リクエストの解析後にリモート ホストへの接続を開始する ProxyRequest.procese() にカスタム ロジックを追加するのに適しているように見えます。

したがって、(おそらく) ProxyRequest クラスをサブクラス化し、requestFactoryクラス属性を介して MyProxy に提供する必要があります。

于 2013-03-11T20:23:27.747 に答える