Отправка "User-agent" через Python Requests: в headers

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы передать User-Agent с использованием Requests, укажите этот заголовок через аргумент headers:

Python
Скопировать код
import requests
requests.get('http://example.com', headers={'User-Agent': 'Custom Agent'})

Этот короткий кусок кода отправит GET-запрос с пользовательским User-Agent.

Кинга Идем в IT: пошаговый план для смены профессии

Глубина заголовка "User-Agent"

Понимание смысла заголовка User-Agent критично для HTTP-соединений, так как он представляет клиентскую программу, инициирующую запрос. Это позволяет серверу адаптировать свой ответ.

Надёжный заголовок для сессии: постоянный User-Agent

Заголовки внутри сессии сохраняются, будто в шкафу.

Python
Скопировать код
session = requests.Session()
session.headers.update({'User-Agent': 'Persistent Agent'})
response = session.get('http://example.com')

Здесь User-Agent будет постоянно присутствовать в каждом запросе в рамках данной сессии.

Добродел: сохраняем заголовки по умолчанию

В предыдущих версиях requests рекомендуется сохранять стандартные заголовки, дополняя их своими:

Python
Скопировать код
headers = requests.utils.default_headers()
headers.update({'User-Agent': 'Combiner Agent'})
response = requests.get('http://example.com', headers=headers)

Подобный подход обеспечит сохранение стандартных заголовков при каждом запросе.

Под прицелом: отладка заголовков

Убедитесь в корректности отправки заголовков:

Python
Скопировать код
request = requests.Request('GET', 'http://example.com', headers={'User-Agent': 'Debugger Agent'})
prepared = request.prepare()
print(f"Отправленные заголовки: {prepared.headers}")

Это поможет эффективно отладить отправленные данные.

Крутые функции сессий: управление куками и соединениями

Сессии обеспечивают управление куками и соединениями. По сути, они — супергерои в управлении заголовками:

Python
Скопировать код
with requests.Session() as session:
    session.headers.update({'User-Agent': 'Session Magician'})
    # Все последующие запросы с использованием этой сессии

Совет по секретности: Для предотвращения отслеживания отключите куки:

Python
Скопировать код
session = requests.Session()
session.cookies.clear_session_cookies()

Не делим на крупное и мелкое: Регистр не важен

В словарях Python регистр имен заголовков не играет роли:

Python
Скопировать код
headers = {
    'user-agent': 'No-Yelling',
    'content-type': 'text/html',
}
# Сервер не обидится, если написать с маленькой буквы

На подходе: Имитация браузера

Эмулируя реальные браузеры в заголовке User-Agent, вы сможете избежать блокировки:

Python
Скопировать код
headers = {'User-Agent': 'Mozilla/5.0 (compatible; HandsomeBrowser/1.2)'}

Такой подход увеличит ваши шансы в веб-скрапинге.

Визуализация

Перед добавлением заголовков ваш HTTP-запрос выглядит так:

Markdown
Скопировать код
До: Простой HTTP-запрос 📤: "Привет, я скрипт!"
После: Наряженный HTTP-запрос 📤🎩: "Доброго времени суток, я элегантный браузер!"

Используя настройку заголовков, вы преобразуете запрос:

Python
Скопировать код
import requests
url = "http://example.com"
headers = {"User-Agent": "Fancy-Browser/2.0"}
response = requests.get(url, headers=headers)

Теперь ваш HTTP-запрос приготовлен к любым «тушам» на сервере 🥳.

Мастер маскировки: Имитация User-Agent

Правильно выбранный User-Agent делает запросы неразличимыми от настоящих браузеров:

Python
Скопировать код
headers = {'User-Agent': 'Mozilla/5.0...'}  # Клянусь, это Firefox!

Это помогает повысить проходимость запросов при веб-скрапинге.

Полезные материалы

  1. Быстрый старт – документация Requests 2.31.0
  2. User-Agent – HTTP | MDN
  3. Веб-краулер – отправка "User-agent" с помощью библиотеки Requests – Python – Stack Overflow
  4. HTTP-заголовки – HTTP | MDN
  5. User agent – Википедия
  6. Библиотека Requests в Python (руководство) – Real Python