Когда вы используете urlopen
, вы собираетесь запрашивать все содержимое (запрос HTTP GET), поэтому поиск необязательного заголовка длины содержимого не так уж и полезен, как только вы пойдете таким образом (все в порядке, сохраните у вас немного времени и памяти, но вы наложили избегаемую нагрузку на сервер и сеть). Тем не менее, как указывает существующий ответ, len
из read()
результата urlopen
- это способ, который будет работать, даже если длина содержимого отсутствует.
Увы, urllib2 не поддерживает HTTP-метод HEAD. Чтобы попробовать HEAD, вы должны использовать модуль нижнего уровня httplib (установить соединение с сервером, вызвать его метод request('HEAD', url)
, вызвать его getresponse
, чтобы получить объект HttpResponse, вызвать getheader
метод для последнего, чтобы получить заголовок длины контента ... вы понимаете, почему я говорю, что модуль является более низким уровнем ;-). Если вы имеете дело с очень большими страницами и разумными серверами (те, которые устанавливают заголовок длины контента), это, хотя и грязно, может быть важной оптимизацией.