HTTP HEAD в Python Requests: получение заголовков без тела

В мире веб-разработки, когда необходимо получить информацию о ресурсе на сервере, не загружая при этом его содержимое, метод HTTP HEAD оказывается незаменимым инструментом. В Python, библиотека Requests предоставляет простой и элегантный способ использования этого метода. В этой статье мы подробно рассмотрим, как использовать requests.head для получения HTTP-заголовков без загрузки тела ответа.

Что такое HTTP HEAD?

HTTP HEAD – это метод, который запрашивает у сервера только заголовки ответа, без тела. Это полезно в следующих сценариях:

  • Проверка доступности ресурса: Можно быстро проверить, существует ли ресурс на сервере, не загружая его.
  • Получение метаданных: Заголовки содержат важную информацию о ресурсе, такую как тип контента, дата последнего изменения, размер и т.д.
  • Оптимизация: Сокращение трафика и времени загрузки, когда само содержимое ресурса не требуется.

Использование requests.head

Библиотека Requests предоставляет функцию head, которая отправляет HTTP HEAD запрос. Синтаксис очень похож на requests.get:


import requests

url = "https://www.example.com"

response = requests.head(url)

print(response.status_code)
print(response.headers)

В этом примере:

  1. Мы импортируем библиотеку Requests.
  2. Определяем URL, к которому будем отправлять запрос.
  3. Используем requests.head(url) для отправки HEAD запроса.

Разбор заголовков

Атрибут response.headers представляет собой словарь, где ключи – это имена заголовков, а значения – их значения; Можно получить доступ к конкретным заголовкам следующим образом:


import requests

url = "https://www.example.com"
response = requests.head(url)

content_type = response.headers.get("Content-Type")
last_modified = response.headers.get("Last-Modified")

print(f"Content-Type: {content_type}")
print(f"Last-Modified: {last_modified}")

Метод get используется для получения значения заголовка по его имени. Если заголовок отсутствует, метод вернет None.

Обработка ошибок

Как и при использовании requests.get, важно обрабатывать возможные ошибки, такие как сетевые проблемы или ошибки сервера. Можно использовать блок try...except:


import requests

url = "https://www.example.com"

try:
 response = requests.head(url, timeout=5) # Добавляем timeout
 response.raise_for_status # Проверяем на HTTP ошибки
 print(response.headers)
except requests.exceptions.RequestException as e:
 print(f"Ошибка: {e}")

В этом примере:

  • Мы добавляем timeout=5, чтобы запрос не зависал слишком долго.
  • response.raise_for_status вызывает исключение, если код статуса ответа указывает на ошибку (например, 4xx или 5xx).
  • Блок except перехватывает исключение requests.exceptions.RequestException и выводит сообщение об ошибке.

HTTP HEAD метод в сочетании с библиотекой Requests предоставляет мощный и удобный способ получения информации о ресурсах на сервере без необходимости загрузки их содержимого. Это может быть полезно для различных задач, таких как проверка доступности, получение метаданных и оптимизация производительности. Помните об обработке ошибок и использовании таймаутов для обеспечения надежности вашего кода.