繁体   English   中英

Python 请求从 POST 中删除 Content-Length 标头

[英]Python requests remove the Content-Length header from POST

我正在使用 python requests 模块对站点进行一些测试。

requests 模块允许您通过传入一个键设置为 None 的字典来删除某些标头。 例如

headers = {u'User-Agent': None}

将确保没有用户代理随请求一起发送。

但是,似乎当我发布数据时,即使我指定了 None 或不正确的值,请求也会为我计算正确的 Content-Length。 例如。

headers = {u'Content-Length': u'999'}
headers = {u'Content-Length': None}

我检查了请求中使用的标头的响应 (response.request.headers),我可以看到 Content-Length 已使用正确的值重新添加。 到目前为止,我看不到任何禁用此行为的方法

CaseInsensitiveDict({'Content-Length': '39', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept-Encoding': 'gzip, deflate, compress', 'Accept': '*/*', 'User-Agent': 'python-requests/2.2.1 CPython/2.7.6 Linux/3.13.0-36-generic'})

我真的很想继续使用请求模块来做到这一点。 这可能吗?

您必须手动准备请求,然后删除生成的内容长度标头:

from requests import Request, Session

s = Session()
req = Request('POST', url, data=data)
prepped = req.prepare()
del prepped.headers['content-length']
response = s.send(prepped)

请注意,大多数兼容的 HTTP 服务器可能会忽略您的帖子正文!

如果您打算使用分块传输编码(您不必发送内容长度),则对data参数使用迭代器。 请参阅文档中的分块编码请求 在这种情况下不会设置Content-Length标头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM