Отправка «User-agent» с использованием библиотеки запросов в Python

217

Я хочу отправить значение "User-agent"при запросе веб-страницы с помощью запросов Python. Я не уверен, если это нормально, чтобы отправить это как часть заголовка, как в коде ниже:

debug = {'verbose': sys.stderr}
user_agent = {'User-agent': 'Mozilla/5.0'}
response  = requests.get(url, headers = user_agent, config=debug)

Отладочная информация не показывает заголовки, отправляемые во время запроса.

Допустимо ли отправлять эту информацию в шапку? Если нет, как я могу отправить его?

charleslparker
источник

Ответы:

324

Значение user-agentдолжно быть указано как поле в заголовке.

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

Если вы используете запросы v2.13 и новее

Самый простой способ сделать то, что вы хотите, это создать словарь и указать заголовки напрямую, например, так:

import requests

url = 'SOME URL'

headers = {
    'User-Agent': 'My User Agent 1.0',
    'From': 'youremail@domain.com'  # This is another valid field
}

response = requests.get(url, headers=headers)

Если вы используете запросы v2.12.x и старше

В старых версиях requestsзаголовков по умолчанию с заглушкой, поэтому вы должны выполнить следующие действия, чтобы сохранить заголовки по умолчанию, а затем добавить свои собственные.

import requests

url = 'SOME URL'

# Get a copy of the default headers that requests would use
headers = requests.utils.default_headers()

# Update the headers with your custom ones
# You don't have to worry about case-sensitivity with
# the dictionary keys, because default_headers uses a custom
# CaseInsensitiveDict implementation within requests' source code.
headers.update(
    {
        'User-Agent': 'My User Agent 1.0',
    }
)

response = requests.get(url, headers=headers)
WKL
источник
6
Вы также можете получить доступ к отправленным заголовкам response.request.headers, это работает, потому что исходный объект запроса является атрибутом объекта ответа. См. Также http://docs.python-requests.org/en/latest/user/advanced/#request-and-response-objects
здесь
3
Значение по умолчанию также доступно как request.utils.default_user_agent (), если вы хотите просто дополнить его своей собственной информацией.
nealmcb
3
Это не правильно. Это забивает остальную часть заголовков. Он должен получить копию значений по умолчанию из request.utils.default_user_agent (), обновить ее и отправить ее.
Чед Миллер
1
для простоты на httpbin.org/headers (загружаемые материалы) вы можете получить заголовки браузера, а затем сделать ваш запрос таким,
какой
1
По крайней мере 2.13.0, заголовки не засорены, и документы просто говорят вам использовать headerskwarg.
Джмиллс
62

Сеанс удобнее использовать , так что вам не нужно каждый раз устанавливать заголовки:

session = requests.Session()
session.headers.update({'User-Agent': 'Custom user agent'})

session.get('https://httpbin.org/headers')

По умолчанию сеанс также управляет файлами cookie для вас. Если вы хотите отключить это, посмотрите этот вопрос .

пользователь
источник