Подтвердить что ты не робот

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

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

Content-Type text/html

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

urllib2.urlopen(URL).info()

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

Content-Type: video/x-flv

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

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

4b9b3361

Ответ 1

Попробуйте запросить 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, который может сделать это лучше, но я не думаю, что вам это понадобится в большинстве случаев. Взгляните на документацию python:

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

Ответ 2

Content-Type text/html

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

в соответствии с 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 doc....