2014-11-03 53 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的要求,如果没有一个,需要一个。它可能更清洁,而不是检查响应 ...但您可能无法获得您想要的所有信息。