我正在编写一个使用twisted.web.client.Agent 发出https 请求的python 程序。我想选择通过 Tor 发出这些请求,如果我将我的 socks5 代理设置为 127.0.0.1:9050,我应该能够做到这一点。
我找不到任何关于使用 socks 代理的扭曲文档,但我可以找到有关使用 http 代理的信息:https ://twistedmatrix.com/documents/current/web/howto/client.html#auto9
我还在另一个项目 ooni-probe 中发现了一些代码,它似乎是通过 socks 代理发出扭曲的 Web 请求。这里是代理:
https://gitweb.torproject.org/ooni-probe.git/blob/HEAD:/ooni/templates/httpt.py#l65
self.control_agent = Agent(reactor, sockshost="127.0.0.1",
socksport=config.tor.socks_port)
但是那个Agent其实是ooni.utils.txagentwithsocks.Agent,继承自twisted.web.client.Agent:
https://gitweb.torproject.org/ooni-probe.git/blob/HEAD:/ooni/utils/txagentwithsocks.py#l157
那里的请求方法如下所示:
def request(self, method, uri, headers=None, bodyProducer=None):
if (uri.startswith('shttp') or uri.startswith('httpo')) and not HTTPConnectionPool:
log.err("Requests over SOCKS are supported only with versions of Twisted >= 12.1.0")
raise UnsupportedTwistedVersion
return client.Agent.request(self, method, uri, headers, bodyProducer)
似乎 Twisted >= 12.1.0 支持 socks 代理,对吧?有谁知道如何在不编写twisted.web.client.Agent 子类的情况下通过它们发出请求?