使用 urllib2.urlopen 时如何访问包含重定向的原始响应标头
Posted
技术标签:
【中文标题】使用 urllib2.urlopen 时如何访问包含重定向的原始响应标头【英文标题】:How do I access the original response headers that contain a redirect when using urllib2.urlopen 【发布时间】:2011-06-24 14:53:12 【问题描述】:我正在尝试解析使用 urllib2.urlopen 后返回的 HTTP 响应的位置标头,但我收到的唯一响应标头来自目标重定向 --- 不是包含位置标头的原始响应.
我已经关注 Stack Overflow 上的其他问题,这些问题建议子类化 urllib2.HTTPRedirectHandler,但我仍然无法理解如何访问 urlopen 最终遵循的原始响应。
这是一个问题的例子:
import urllib2
req = urllib2.urlopen("http://wp.me")
print req.info()
print 的输出包含重定向请求目标的响应标头。我想看原版。
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】: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 设置的任何其他属性都可以通过结果提供给您。
【讨论】:
这正是我想要的。非常感谢。以上是关于使用 urllib2.urlopen 时如何访问包含重定向的原始响应标头的主要内容,如果未能解决你的问题,请参考以下文章
如何使用urllib2.urlopen检查(不绕过)SSL证书?
urllib2.urlopen() 与 urllib.urlopen() - urllib2 在 urllib 工作时抛出 404!为啥?