Как проверить код состояния HTTP объекта, не загружая его? - PullRequest
4 голосов
/ 13 ноября 2009
>>> a=urllib.urlopen('http://www.domain.com/bigvideo.avi')
>>> a.getcode()
404
>>> a=urllib.urlopen('http://www.google.com/')
>>> a.getcode()
200

Мой вопрос ... bigvideo.avi - 500 МБ. Мой скрипт сначала загружает файл, а затем проверяет его? Или он может сразу проверить код ошибки, не сохраняя файл?

Ответы [ 3 ]

16 голосов
/ 13 ноября 2009

Вы хотите фактически указать серверу , а не , чтобы он отправлял полное содержимое файла. HTTP имеет механизм для этого под названием «HEAD», который является альтернативой «GET». Он работает так же, но сервер отправляет вам только заголовки, но не фактическое содержимое.

Это сэкономит по крайней мере одну из вас пропускной способности, в то время как простое не чтение () не будет беспокоить получение полного файла.

Попробуйте это:

import httplib
c = httplib.HTTPConnection(<hostname>)
c.request("HEAD", <url>)
print c.getresponse().status

Код состояния будет напечатан. URL должен быть только сегментом, например, "/ foo", а имя хоста должно быть похоже на "www.example.com".

1 голос
/ 13 ноября 2009

Да, он извлечет файл.

Я думаю, что вы действительно хотите сделать, это отправить запрос HTTP HEAD (который в основном запрашивает у сервера не сами данные, а только заголовки). Вы можете посмотреть здесь .

0 голосов
/ 13 ноября 2009

Я думаю, ваш код уже делает это. вы никогда не вызываете метод read () в ответе, поэтому вы фактически никогда не загружаете содержимое файла.

еще лучше ... вы можете отправить запрос HTTP HEAD, используя httplib вместо выполнения HTTP GET, как это делает ваш код urllib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...