2

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

我已经关注了 Stack Overflow 上的其他问题,这些问题建议对 urllib2.HTTPRedirectHandler 进行子类化,但我仍然无法理解如何访问 urlopen 最终遵循的原始响应。

这是问题的一个例子:

import urllib2

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

print req.info()

print 的输出包含重定向请求目标的响应标头。我想看原版。

任何帮助,将不胜感激。

4

1 回答 1

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

于 2011-02-10T04:58:14.063 回答