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.protocol是 Python 类属性。因为 Python 是一种动态类型语言,它比 Java 等变量和类的定义方式具有更大的灵活性。

MyProxy 是 Proxy 子类的一个空类,它没有定义任何与 proxy.Proxy 中默认提供的行为有关的行为。您可能需要做的(我不是 Twisted 内部专家)是查看 proxy.Proxy 类的文档并通过在 MyProxy 中重新定义它们来覆盖一些方法函数,以便这些方法执行您正在寻找的逻辑。

如果您查看 Twisted API 文档中的源代码,那么 ProxyRequest.procese() 似乎是添加自定义逻辑的好地方,它在解析传入的 HTTP 请求后开始连接远程主机。

所以你(也许)需要继承 ProxyRequest 类,通过requestFactory类属性将它提供给你的 MyProxy。

于 2013-03-11T20:23:27.747 回答