当我使用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'标题的值?
答案 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/'