如何通过代理调试urllib2请求

时间:2014-11-03 20:08:06

标签: python http proxy urllib2

我正在使用Python的urllib2进行HTTP请求,该请求通过代理。

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是否有这样的内容?

1 个答案:

答案 0 :(得分:2)

我很确定debuglevel没有记录。

在实践中,httplib实际上是urllib2的一项功能,lambda: httplib.HTTPConnection(debuglevel=1)只是为了方便起见,所以您不必通过httplib.HTTPConnection代替默认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 作为您的HTTP对象工厂。所以,你不可能在任何其他处理程序中找到类似的东西。

但是如果你想依赖于实现的未记录的功能,你真的需要read the source来亲眼看看。


无论如何,向任何处理程序添加调试的显而易见的方法是将它们子类化并自己完成。例如:

ProxyHandler

我依赖于set_proxy在请求中调用{{1}}的内部知识,如果它没有,并且需要一个。{1}}相反,检查响应可能会更干净......但您可能无法获得所需的所有信息。