Заголовок ответа Python urllib2
Я пытаюсь извлечь заголовок ответа URL-запроса. Когда я использую firebug для анализа вывода ответа URL-запроса, он возвращает:
Content-Type text/html
Однако, когда я использую код python:
urllib2.urlopen(URL).info()
результирующий вывод возвращает:
Content-Type: video/x-flv
Я новичок в python и в веб-программировании вообще; любое полезное понимание очень ценится. Кроме того, если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Заранее спасибо за чтение этого сообщения
Ответы
Ответ 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....
Ответ 6
import urllib.request
fhand = urllib.request.urlopen('http://data.pr4e.org/intro-short.txt')
печать (fhand.info())