Python urllib2 заголовок ответа - PullRequest
       4

Python urllib2 заголовок ответа

24 голосов
/ 31 октября 2009

Я пытаюсь извлечь заголовок ответа на URL-запрос. Когда я использую firebug для анализа вывода ответа на URL-запрос, он возвращает:

Content-Type text/html

Однако, когда я использую код Python:

urllib2.urlopen(URL).info()

результирующий вывод возвращает:

Content-Type: video/x-flv

Я новичок в Python и в веб-программировании в целом; любая полезная идея очень ценится. Также, если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Заранее спасибо за чтение этого поста

Ответы [ 5 ]

37 голосов
/ 26 марта 2010

Попробуйте запросить как Firefox. Вы можете увидеть заголовки запроса в Firebug, поэтому добавьте их в объект запроса:

import urllib2

request = urllib2.Request('http://your.tld/...')
request.add_header('User-Agent', 'some fake agent string')
request.add_header('Referer', 'fake referrer')
...
response = urllib2.urlopen(request)
# check content type:
print response.info().getheader('Content-Type')

Есть также HTTPCookieProcessor, который может сделать его лучше, но я не думаю, что он понадобится вам в большинстве случаев. Посмотрите документацию по питону:

http://docs.python.org/library/urllib2.html

5 голосов
/ 31 октября 2009

Content-Type text / html

Действительно, вот так, без двоеточия?

Если это так, это может объяснить это: это неверный заголовок, поэтомуон игнорируется, поэтому urllib угадывает тип содержимого, взглянув на имя файла.Если в конце URL-адреса будет указано «.flv», он будет предполагать, что тип должен быть video/x-flv.

2 голосов
/ 31 октября 2009

Это своеобразное несоответствие может быть объяснено двумя заголовками (возможно, типа accept), отправляемыми двумя запросами - вы можете проверить это ...? Или, если Javascript работает в Firefox (который, как я полагаю, вы используете, когда запускаете firebug?) - поскольку он определенно НЕ работает в случае с Python - «все ставки выключены», как говорится ;-) .

1 голос
/ 31 октября 2009

Имейте в виду, что веб-сервер может возвращать разные результаты для одного и того же URL-адреса в зависимости от различий в запросе. Например, согласование типов содержимого: запрашивающий может указать список типов содержимого, которые он примет, а сервер может вернуть разные результаты, чтобы попытаться удовлетворить различные потребности.

Кроме того, возможно, вы получаете страницу с ошибкой для одного из ваших запросов, например, из-за того, что он искажен или у вас не установлены файлы cookie, которые должным образом аутентифицируют вас, и т. Д. Посмотрите на сам ответ, чтобы увидеть, что вы получают.

0 голосов
/ 10 октября 2012

согласно http://docs.python.org/library/urllib2.html есть только метод get_header() и ничего о getheader.

Запрашиваемая, потому что Ваш код отлично работает для

response.info().getheader('Set cookie')

но как только я выполню

response.info().get_header('Set cookie')

я получаю:

Traceback (most recent call last):
  File "baza.py", line 11, in <module>
    cookie = response.info().get_header('Set-Cookie')
AttributeError: HTTPMessage instance has no attribute 'get_header'

редактировать: Кроме того
response.headers.get('Set-Cookie') тоже отлично работает, не упоминается в документе urlib2 ....

...