Python 使用urllib2.urlopen时,如何访问包含重定向的原始响应头

Python 使用urllib2.urlopen时,如何访问包含重定向的原始响应头,python,header,location,urllib2,urlopen,Python,Header,Location,Urllib2,Urlopen,我试图解析使用urllib2.urlopen后返回的HTTP响应的位置头,但我收到的唯一响应头来自目标重定向,而不是包含位置头的原始响应 我已经回答了关于堆栈溢出的其他问题,这些问题建议将urllib2.HTTPRedirectHandler子类化,但我仍然无法理解如何访问urlopen最终遵循的原始响应 下面是一个问题示例: import urllib2 req = urllib2.urlopen("http://wp.me") print req.info() print的输出包含重定

我试图解析使用urllib2.urlopen后返回的HTTP响应的位置头,但我收到的唯一响应头来自目标重定向,而不是包含位置头的原始响应

我已经回答了关于堆栈溢出的其他问题,这些问题建议将urllib2.HTTPRedirectHandler子类化,但我仍然无法理解如何访问urlopen最终遵循的原始响应

下面是一个问题示例:

import urllib2

req = urllib2.urlopen("http://wp.me")

print req.info()
print的输出包含重定向请求目标的响应头。我想看看原件


任何帮助都将不胜感激。

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设置的任何其他属性都可以通过结果提供给您。

这正是我想要的。谢谢你。