我想在使用Python请求请求网页时为“用户代理”发送一个值。我不确定是否可以将此作为头的一部分发送,如下面的代码所示:

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

调试信息没有显示在请求期间发送的标头。

在报头中发送此信息是否可以接受?如果没有,我要怎么发送?


当前回答

用户代理应该被指定为报头中的一个字段。

下面是一个HTTP报头字段列表,您可能对特定于请求的字段感兴趣,其中包括User-Agent。

如果您使用的是v2.13或更新版本的请求

最简单的方法是创建一个字典,并直接指定你的头文件,如下所示:

import requests

url = 'SOME URL'

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

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

如果您正在使用请求v2.12。X及以上

旧版本的请求会破坏默认头,因此您需要执行以下操作来保留默认头,然后将自己的头添加到它们中。

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)

其他回答

它会像浏览器一样发送请求

import requests

url = 'https://Your-url'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'}

response= requests.get(url.strip(), headers=headers, timeout=10)

使用会话更方便,这样你就不必每次都记得设置头文件:

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

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

默认情况下,会话还为您管理cookie。如果您想禁用它,请参阅这个问题。

用户代理应该被指定为报头中的一个字段。

下面是一个HTTP报头字段列表,您可能对特定于请求的字段感兴趣,其中包括User-Agent。

如果您使用的是v2.13或更新版本的请求

最简单的方法是创建一个字典,并直接指定你的头文件,如下所示:

import requests

url = 'SOME URL'

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

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

如果您正在使用请求v2.12。X及以上

旧版本的请求会破坏默认头,因此您需要执行以下操作来保留默认头,然后将自己的头添加到它们中。

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)