如何在Twitty Twister中启用HTTP代理?

时间:2014-02-25 00:55:34

标签: python twisted

我正在使用twittytwister模块来实现Twitter客户端,但看起来它已经不再开发了。我需要连接到HTTP代理才能访问互联网,但模块没有这样的选项,所以我正在考虑修改它。

def __downloadPage(factory, *args, **kwargs):
    downloader = factory(*args, **kwargs)
    if downloader.scheme == 'https':
        from twisted.internet import ssl
        contextFactory = ssl.ClientContextFactory()
        reactor.connectSSL(downloader.host, downloader.port,
                           downloader, contextFactory)
    else:
        reactor.connectTCP(downloader.host, downloader.port,
                           downloader)
    return downloader

def getPage(url, *args, **kwargs):
    return __downloadPage(client.HTTPClientFactory, url, *args, **kwargs)

我可以在这做什么让它与我的代理连接?我是否将client.HTTPClientFactory替换为其他内容?

1 个答案:

答案 0 :(得分:0)

较新的(在Twisted 9.0.0中添加)HTTP客户端API twisted.web.client.Agent,包括对连接到HTTP代理的支持。例如,您可以写:

from twisted.web.client import Agent, ProxyAgent
from twisted.internet.endpoints import clientFromString
from twisted.internet import reactor

from os import environ

try:
    proxy = environ["HTTP_PROXY"]
except KeyError:
    agent = Agent(reactor)
else:
    agent = ProxyAgent(clientFromString(reactor, proxy))

有关此示例使用的HTTP_PROXY环境变量的预期格式的详细信息,请参阅endpoints documentation

不幸的是,看起来twittytwister使用较旧的HTTP客户端API,因此您需要将其移植到使用Agent才能从ProxyAgent中受益。幸运的是,getPage样式API相当有限,因此用Agent样式代码替换它应该不是很难。