2014-02-25 52 views
0

我使用twittytwister模塊來實現一個Twitter客戶端,但看起來它不再被開發。我需要連接到HTTP代理才能訪問互聯網,但該模塊沒有這樣的選項,所以我正在修改它。我該如何着手在Twitty Twister中啓用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嗎?

回答

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類型的代碼替換它應該不是很難。

+0

除了使用ProxyAgent以外,還有其他方法嗎? twittytwister看起來像是使用了兩者的混合。將它完全移植到新API看起來很複雜。 – Crypto

相關問題