我正在使用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
是否有这样的内容?
答案 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}}相反,检查响应可能会更干净......但您可能无法获得所需的所有信息。