2014-11-03 70 views
1

我使用通過代理的Python urllib2發出HTTP請求。如何通過代理調試urllib2請求

proxy_handler = urllib2.ProxyHandler({'http': 'http://myproxy'}) 
opener = urllib2.build_opener(proxy_handler) 
urllib2.install_opener(opener) 
r = urllib2.urlopen('http://www.pbr.com') 

我想記錄這個請求中的所有頭文件。我知道,使用標準HTTPHandler你可以這樣做:

handler = urllib2.HTTPHandler(debuglevel=1) 

有沒有這樣的事情對於ProxyHandler

回答

2

我很肯定debuglevel沒有記錄。

在實踐中,它實際上是的httpliburllib2功能只是一起轉發爲了方便,所以您不必通過lambda: httplib.HTTPConnection(debuglevel=1),取代默認的httplib.HTTPConnection爲您的HTTP對象的工廠。所以,你不可能在任何其他處理器中發現任何類似的東西。

但是,如果您想依賴實現的未公開的功能,那麼您真的需要read the source才能親自查看。


無論如何,明顯的方式來增加調試任何處理的是繼承他們自己做。例如:

class LoggingProxyHandler(urllib2.ProxyHandler): 
    def proxy_open(self, req, proxy, type): 
     had_proxy = req.has_proxy() 
     response = super(LoggingProxyHandler, self).proxy_open(req, proxy, type) 
     if not had_proxy and req.has_proxy(): 
      # log stuff here 
     return response 

我依靠內部知識ProxyHandler電話set_proxy的要求,如果沒有一個,需要一個。它可能更清潔,而不是檢查響應 ...但您可能無法獲得您想要的所有信息。