扭曲的Web客户端是否可以通过SOCKS代理发出请求?

时间:2013-05-02 01:41:28

标签: python proxy twisted socks tor

我正在编写一个python程序,它使用twisted.web.client.Agent来发出https请求。我想通过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的子类的情况下通过它们发出请求?

2 个答案:

答案 0 :(得分:4)

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

如果你想加快这个速度,你可以鼓励OONI项目向上游贡献他们的实现。

答案 1 :(得分:0)

使用我的图书馆" txtorcon"您可以轻松创建一个Agent,适用于内置的Twisted Web客户端(或treq),可以通过Tor(或通过选定的电路)发出请求。

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

txtorcon现在包含它自己的最小SOCKS5客户端有两个原因:txsocksx没有(并且可能赢得&#t; t?)支持Python3和Tor有一些自定义SOCKS5操作码(用于DNS查找)并且可能会添加更多在将来。