Python中如何删除requests库中的特定请求头?

抓包安卓 app,发现实际请求的 header 是

Content-Type: application/x-www-form-urlencoded; charset=UTF-8
token: sasasasasasasasasasas
Host: ********:8443
Connection: Keep-Alive

用 requests 模拟,添加上述 header 以后,发现实际发送的请求经过 requests 处理,header 增加了几项(带*的)

*User-Agent: python-requests/2.19.1
*Accept-Encoding: gzip, deflate
*Accept: */*
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Host: *******:8443
*Content-Length: 0
token: sasasasasasasasasasas

求助怎么完全自定义 requests 的 header,或者删除 header 中的某些项,文档中没找见....


Python中如何删除requests库中的特定请求头?

9 回复

不能删除
你可以覆盖掉它


在Python的requests库中,你不能直接“删除”一个已经设置好的请求头,但你可以通过传递一个不包含该头的新字典来覆盖它。具体做法是在发起请求时,通过 headers 参数传入一个自定义的字典,这个字典会覆盖掉会话或请求中已经存在的同名请求头。

如果你想让某个请求头在本次请求中不发送,最直接的方法就是不把它放进这次请求的 headers 字典里。如果这个头是从一个会话(requests.Session)或默认头里带来的,你可以在本次请求的 headers 参数里将它设置为 None,这样requests库就不会发送它。

下面是一个代码示例,展示了两种常见场景的处理方法:

import requests

# 场景1:从零开始构建请求,确保不包含特定头(如'User-Agent')
url = 'https://httpbin.org/headers'
# 定义一个不包含'User-Agent'的请求头字典
my_headers = {
    'Accept': 'application/json',
    'Custom-Header': 'MyValue'
}
# 发起请求,只发送my_headers中定义的头部
response1 = requests.get(url, headers=my_headers)
print("场景1响应(无User-Agent):", response1.json())

# 场景2:覆盖会话或默认请求中的特定头
# 假设我们有一个会话,它默认设置了'User-Agent'
session = requests.Session()
session.headers.update({'User-Agent': 'MySessionBot/1.0', 'X-Common-Header': 'AlwaysSend'})

# 现在,针对某一次请求,我们不想发送'User-Agent'
# 方法:在本次请求的headers参数中,将'User-Agent'设置为None
response2 = session.get(url, headers={'User-Agent': None})
print("\n场景2响应(User-Agent被覆盖为None):", response2.json())

核心逻辑:requests库在构造最终请求头时,会按优先级合并。本次请求的 headers 参数优先级最高,它会覆盖会话(Session.headers)和默认请求头中的同名项。将某个头的值设置为 None 是requests库识别的特殊信号,意味着“不发送这个头”。

总结:想删掉某个头,就在本次请求的headers里把它设为None

是可以覆盖,比如模拟浏览器操作的时候,header 换成 Chrome,然而这个是 app 的请求,万一服务端来个 header 过滤就 gg…

python<br>custom_headers={"user-agent": "", ......}<br>r = requests.get(url, headers=custom_headers}<br>

请参考文档

我就是这么做的,但是只能覆盖,如果值空白,发送的请求里面也有,不能删除已有的 cookie,文档里面没有提到我才来问的,谢谢

详细说说?…意思是没办法?


的意思是这样
import requests

proxies = {
“http”: “http://127.0.0.1:8888”,
“https”: “http://127.0.0.1:8888”,
}
headers = {‘User-Agent’: None}
requests.get(“http://example.org”, headers=headers, proxies=proxies)

回到顶部