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

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

Content-Type text/html 

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

 urllib2.urlopen(URL).info() 

полученный результат возвращает:

 Content-Type: video/x-flv 

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

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

Попробуйте запросить 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

Content-Type text / html

Неужели так, без двоеточия?

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

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

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

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

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

edit: Более того
response.headers.get('Set-Cookie') отлично работает, не упоминается в urlib2 doc ….

import urllib.request

fhand = urllib.request.urlopen (' http://data.pr4e.org/intro-short.txt ')

печать (fhand.info ())

Interesting Posts