3

我正在编写一个使用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 子类的情况下通过它们发出请求?

4

2 回答 2

4

Twisted 中的twisted.web.client.AgentAPI 不支持 SOCKS。这是一个计划但尚未实现的功能。

如果您想加快这一进程,您可以鼓励 OONI 项目在上游贡献他们的实施。

于 2013-05-02T12:07:03.820 回答
0

使用我的库“txtorcon”,您可以轻松地创建一个Agent适用于内置 Twisted Web 客户端(或 treq)的工具,该客户端可以通过 Tor(或选定的电路)发出请求。

请参阅:https ://txtorcon.readthedocs.io/en/latest/guide.html#making-connections-over-tor

txtorcon 现在包含其自己的最小 SOCKS5 客户端,原因有两个:txsocksx 不(也可能不会?)支持 Python3,Tor 有一些自定义 SOCKS5 操作码(用于 DNS 查找),将来可能会添加更多。

于 2018-02-07T20:30:06.340 回答