使用Python中的请求库发送“用户代理”


216

我想在"User-agent"使用Python请求请求网页时发送的值。我不确定是否可以将其作为标头的一部分发送,如以下代码所示:

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

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

在标头中发送此信息是否可以接受?如果没有,我该如何发送?

Answers:


322

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 2015年

3
不对 它破坏了其余标题。他应该从requests.utils.default_user_agent()获取默认值的副本,并进行更新并发送。
乍得·米勒

1
为了简便起见,在httpbin.org/headers(可下载的内容)上,您可以获取浏览器标题,然后使您的查询显示出来
m3nda

1
至少在中2.13.0,标头没有被破坏,文档只是告诉您使用headerskwarg。
Jmills '17

62

使用session更方便,这样您就不必每次都设置标题了:

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

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

默认情况下,会话也会为您管理cookie。如果您要禁用该功能,请参阅此问题

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.