如何从urllib2请求中获取完整的标题信息?

时间:2011-08-15 12:23:21

标签: python html urllib2

我使用python urllib2库打开URL,我想要的是获取请求的完整标题信息。当我使用response.info时,我只能得到这个:

Date: Mon, 15 Aug 2011 12:00:42 GMT
Server: Apache/2.2.0 (Unix)
Last-Modified: Tue, 01 May 2001 18:40:33 GMT
ETag: "13ef600-141-897e4a40"
Accept-Ranges: bytes
Content-Length: 321
Connection: close
Content-Type: text/html

我期待live_http_headers(firefox的附加组件)给出的完整信息,例如:

http://www.yellowpages.com.mt/Malta-Web/127151.aspx

GET /Malta-Web/127151.aspx HTTP/1.1
Host: www.yellowpages.com.mt
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: __utma=156587571.1883941323.1313405289.1313405289.1313405289.1;    __utmz=156587571.1313405289.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)

HTTP/1.1 302 Found
Connection: Keep-Alive
Content-Length: 141
Date: Mon, 15 Aug 2011 12:17:25 GMT
Location: http://www.trucks.com.mt
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET, UrlRewriter.NET 2.0.0
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=zhnqh5554omyti55dxbvmf55; path=/; HttpOnly
Cache-Control: private

我的请求功能是:

def dorequest(url, post=None, headers={}):
    cOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
    urllib2.install_opener( cOpener )
    if post:
        post = urllib.urlencode(post)
    req = urllib2.Request(url, post, headers)
    response   = cOpener.open(req)
    print response.info()  // this does not give complete header info, how can i get complete header info??
    return response.read()
 url = 'http://www.yellowpages.com.mt/Malta-Web/127151.aspx'
 html = dorequest(url)

是否可以使用urllib2实现所需的标题信息详细信息?我不想切换到httplib。

2 个答案:

答案 0 :(得分:7)

当您使用urllib2执行请求时,那些 服务器正在发送的所有标头。

Firefox会向您显示它发送到服务器的标头。

当服务器从Firefox获取这些标头时,其中一些可能会触发它以发送回额外的标头,因此您最终会得到更多的响应标头。

复制Firefox发送的确切标题,您将收到相同的回复。

编辑:执行重定向的页面发送location标头,而不是您重定向到的页面。只需使用response.url即可获取您已发送到的网页的位置。

第一个网址使用302重定向。如果您不想关注重定向,但请查看首页中的标题,请使用URLOpener代替FancyURLOpener,它会自动跟随重定向。

答案 1 :(得分:0)

我看到服务器返回HTTP/1.1 302 Found - HTTP重定向。

urllib会自动关注重定向,因此urllib返回的标头是来自http://www.trucks.com.mt的标头,而不是http://www.yellowpages.com.mt/Malta-Web/127151.aspx