使用python urllib2获取位置标头的值

时间:2012-05-25 03:21:59

标签: python http-headers urllib2

当我使用urllib2并列出标题时,我看不到“位置”标题。

In [19]:p = urllib2.urlopen('http://www.example.com')


In [21]: p.headers.items()
Out[21]: 
[('transfer-encoding', 'chunked'),
 ('vary', 'Accept-Encoding'),
 ('server', 'Apache/2.2.3 (CentOS)'),
 ('last-modified', 'Wed, 09 Feb 2011 17:13:15 GMT'),
 ('connection', 'close'),
 ('date', 'Fri, 25 May 2012 03:00:02 GMT'),
 ('content-type', 'text/html; charset=UTF-8')]

如果我使用telnet和GET

telnet www.example.com 80
Trying 192.0.43.10...
Connected to www.example.com.
Escape character is '^]'.
GET / HTTP/1.0  
Host:www.example.com

HTTP/1.0 302 Found
Location: http://www.iana.org/domains/example/
Server: BigIP
Connection: close
Content-Length: 0

那么,使用urllib2,我如何获得'Location'标题的值?

2 个答案:

答案 0 :(得分:6)

这是因为默认情况下urllib2跟随位置标题。所以最后的回应不会有。如果您突然禁用了以下重定向,则可以看到301和302页面的位置标题。请参阅:How do I prevent Python's urllib(2) from following a redirect

从那里借来:

class NoRedirection(urllib2.HTTPErrorProcessor):
  def http_response(self, request, response):
    return response
  https_response = http_response

opener = urllib2.build_opener(NoRedirection)
location = opener.open('http://www.example.com').info().getheader('Location')

答案 1 :(得分:3)

geturl中返回的类似文件的对象使用urlopen方法:

>>> f = urllib2.urlopen('http://www.example.com')
>>> f.geturl()
'http://www.iana.org/domains/example/'