Python请求从POST移除Content-Length标头

发布于 2021-01-29 17:00:26

我正在使用python请求模块对网站进行一些测试。

请求模块允许您通过传入关键字设置为“无”的字典来删除某些标头。例如

headers = {u'User-Agent': 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'})

我真的很想留在请求模块中执行此操作。这可能吗?

关注者
0
被浏览
37
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您必须手动准备请求,然后删除生成的content-length标头:

    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头将在这种情况下进行设置。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看