Отправка "User-agent" с помощью библиотеки запросов в Python


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

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

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

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

2 163

2 ответа:

The 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 clobbered заголовки по умолчанию, так что вы хотите сделать следующее, чтобы сохранить заголовки по умолчанию, а затем добавить свой собственный к ним.

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)

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

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

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

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