我尝试解析使用urllib2.urlopen后返回的HTTP响应的位置标头,但我收到的唯一响应标头来自目标重定向 - 而不是包含位置标题。
我已经关注了Stack Overflow的其他问题,建议将urllib2.HTTPRedirectHandler子类化,但是我仍然无法理解如何访问urlopen最终跟随的原始响应。
以下是问题的一个示例:
import urllib2
req = urllib2.urlopen("http://wp.me")
print req.info()
print的输出包含重定向请求的目标的响应头。我想看看原版。
任何帮助都将不胜感激。
答案 0 :(得分:6)
urllib2执行透明重定向,但正如您所说,您可以将HTTPRedirectHandler子类化并将其用作开启器以获取所需的值。
import urllib2
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_302(self, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(self, req, fp,
code, msg,
headers)
result.status = code
result.headers = headers
return result
request = urllib2.Request("http://wp.me")
opener = urllib2.build_opener(SmartRedirectHandler())
obj = opener.open(request)
print 'The original headers where', obj.headers
print 'The Redirect Code was', obj.status
您可以在SmartRedirectHandler中为您的req设置的任何其他属性可以通过结果提供给您。