Надсилання "User-agent" за допомогою бібліотеки запитів у Python


216

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

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

Інформація про налагодження не відображає заголовків, що надсилаються під час запиту.

Чи прийнятно надсилати цю інформацію у заголовок? Якщо ні, то як я можу його надіслати?

Відповіді:


323

Це 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)

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 (завантажувані речі) ви можете отримати заголовки браузера, а потім зробити ваш запит на вас
m3nda

1
Принаймні 2.13.0, заголовки не клобуються, і документи просто говорять вам використовувати headerskwarg.
Jmills

62

Зручніше використовувати сеанс , таким чином не потрібно пам’ятати щоразу встановлювати заголовки:

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

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

За замовчуванням сеанс також керує файлами cookie. Якщо ви хочете відключити це, перегляньте це питання .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.