如何在 python 中发送请求时删除 "User-Agent" header
how to remove the "User-Agent" header when send request in python
我正在使用 python requests 库,我需要发送一个没有 user-agent header 的请求。
我找到了 ,但它是针对 Urllib2 的。
我正在尝试模拟一个 Android 应用程序,它在调用私有 API 时执行此操作。
我尝试将 User-Agent
设置为 None
,如下面的代码所示,但它不起作用。它仍然发送 User-Agent: python-requests/2.27.1
.
有什么办法吗?
headers = requests.utils.default_headers()
headers['User-Agent'] = None
requests.post(url, *args, headers=headers, **kwargs)
requests library is built on top of the urllib3 库。因此,当您将 None
User-Agent
header 传递给请求的 post
方法时,urllib3
设置自己的默认值 User-Agent
import requests
r = requests.post("https://httpbin.org/post", headers={
"User-Agent": None,
})
print(r.json()["headers"]["User-Agent"])
输出
python-urllib3/1.26.7
这里是 connection.py
的 urllib3 来源
class HTTPConnection(_HTTPConnection, object):
...
def request(self, method, url, body=None, headers=None):
if headers is None:
headers = {}
else:
# Avoid modifying the headers passed into .request()
headers = headers.copy()
if "user-agent" not in (six.ensure_str(k.lower()) for k in headers):
headers["User-Agent"] = _get_default_user_agent()
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
所以,你可以猴子修补它来禁用默认 User-Agent
header
import requests
from urllib3 import connection
def request(self, method, url, body=None, headers=None):
if headers is None:
headers = {}
else:
# Avoid modifying the headers passed into .request()
headers = headers.copy()
super(connection.HTTPConnection, self).request(method, url, body=body, headers=headers)
connection.HTTPConnection.request = request
r = requests.post("https://httpbin.org/post", headers={
"User-Agent": None,
})
print(r.json()["headers"])
输出
{
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Content-Length': '0',
'Host': 'httpbin.org',
'X-Amzn-Trace-Id': 'Root=1-61f7b53b-26c4c8f6498c86a24ff05940'
}
此外,考虑提供 browser-like User-Agent
这样的 Mozilla/5.0 (Macintosh; Intel Mac OS X 12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
。也许它可以更轻松地解决您的任务
对于 urllib3 >= 1.26.0(又名,请求 >= 2.25.0),您可以使用 urllib3.util.SKIP_HEADER
来抑制 User-Agent
、Accept-Encoding
和 Host
header。有关上游更改,请参阅 https://github.com/psf/requests/issues/5671#issuecomment-1006735307 for an example and https://github.com/urllib3/urllib3/pull/2018。
PS:您可能需要使用 urllib3 >= 1.26.3 以避免垃圾邮件 connection.py: BytesWarning: Comparison between bytes and string
的小问题。参见 https://github.com/urllib3/urllib3/issues/2071。
我正在使用 python requests 库,我需要发送一个没有 user-agent header 的请求。
我找到了
我正在尝试模拟一个 Android 应用程序,它在调用私有 API 时执行此操作。
我尝试将 User-Agent
设置为 None
,如下面的代码所示,但它不起作用。它仍然发送 User-Agent: python-requests/2.27.1
.
有什么办法吗?
headers = requests.utils.default_headers()
headers['User-Agent'] = None
requests.post(url, *args, headers=headers, **kwargs)
requests library is built on top of the urllib3 库。因此,当您将 None
User-Agent
header 传递给请求的 post
方法时,urllib3
设置自己的默认值 User-Agent
import requests
r = requests.post("https://httpbin.org/post", headers={
"User-Agent": None,
})
print(r.json()["headers"]["User-Agent"])
输出
python-urllib3/1.26.7
这里是 connection.py
class HTTPConnection(_HTTPConnection, object):
...
def request(self, method, url, body=None, headers=None):
if headers is None:
headers = {}
else:
# Avoid modifying the headers passed into .request()
headers = headers.copy()
if "user-agent" not in (six.ensure_str(k.lower()) for k in headers):
headers["User-Agent"] = _get_default_user_agent()
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
所以,你可以猴子修补它来禁用默认 User-Agent
header
import requests
from urllib3 import connection
def request(self, method, url, body=None, headers=None):
if headers is None:
headers = {}
else:
# Avoid modifying the headers passed into .request()
headers = headers.copy()
super(connection.HTTPConnection, self).request(method, url, body=body, headers=headers)
connection.HTTPConnection.request = request
r = requests.post("https://httpbin.org/post", headers={
"User-Agent": None,
})
print(r.json()["headers"])
输出
{
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Content-Length': '0',
'Host': 'httpbin.org',
'X-Amzn-Trace-Id': 'Root=1-61f7b53b-26c4c8f6498c86a24ff05940'
}
此外,考虑提供 browser-like User-Agent
这样的 Mozilla/5.0 (Macintosh; Intel Mac OS X 12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
。也许它可以更轻松地解决您的任务
对于 urllib3 >= 1.26.0(又名,请求 >= 2.25.0),您可以使用 urllib3.util.SKIP_HEADER
来抑制 User-Agent
、Accept-Encoding
和 Host
header。有关上游更改,请参阅 https://github.com/psf/requests/issues/5671#issuecomment-1006735307 for an example and https://github.com/urllib3/urllib3/pull/2018。
PS:您可能需要使用 urllib3 >= 1.26.3 以避免垃圾邮件 connection.py: BytesWarning: Comparison between bytes and string
的小问题。参见 https://github.com/urllib3/urllib3/issues/2071。