Как я могу получить полную информацию заголовка из запроса urlib2? - PullRequest
5 голосов
/ 15 августа 2011

Я использую библиотеку 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

MyФункция запроса:

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 ]

7 голосов
/ 15 августа 2011

Эти - это все заголовки, которые сервер отправляет, когда вы выполняете запрос с помощью urllib2.

Firefox также показывает заголовки, которые он отправляет на сервер.

Когда сервер получает эти заголовки из Firefox, некоторые из них могут инициировать его отправку обратно дополнительных заголовков, поэтому у вас также будет больше заголовков ответа.

Дублируйте точные заголовки, которые отправляет Firefox, и вы получите идентичный ответ.

Редактировать: заголовок location отправляется страницей, которая выполняет перенаправление, а не страницей, на которую вы перенаправлены. Просто используйте response.url, чтобы узнать местоположение страницы, на которую вы были отправлены.

В этом первом URL-адресе используется перенаправление 302. Если вы не хотите следовать перенаправлению, но вместо этого видите заголовки с первой страницы, используйте URLOpener вместо FancyURLOpener, который автоматически следует за перенаправлением.

0 голосов
/ 15 августа 2011

Я вижу, что сервер возвращает HTTP/1.1 302 Found - перенаправление HTTP.

urllib автоматически следует за перенаправлениями, поэтому заголовки, возвращаемые urllib, это заголовки от http://www.trucks.com.mt,, а не http://www.yellowpages.com.mt/Malta-Web/127151.aspx

...