繁体   English   中英

为什么我不能使用 Python 的 `requests` 库在 POST 请求中将 `None` 作为数据发送?

[英]Why can't I send `None` as data in a POST request using Python's `requests` library?

似乎当data的键的值为None ,请求中不包含该键。

>>> req = requests.Request('POST', 'http://google.com', data=dict(a=None, b=1))
>>> req.prepare().body
'b=1'

为什么会这样? 我期待一个空字符串,或者类似json.dumps(d)东西,其中None呈现为null 我相信有一个很好的理由——只是好奇它是什么。 (我能想到的一件事是,可能只是None可用于 POST 请求的nullNone编码——这是真的吗?)

另外好奇——为什么requests默默地忽略这些数据而不是抛出错误?

将字典元素设置为None是您明确表示不希望将该参数发送到服务器的方式。

我在requests.Request()文档中找不到具体提到的这一点,但在 URLs中的传递参数中它说:

请注意,任何值为 None 的字典键都不会添加到 URL 的查询字符串中。

显然,它也对POST请求使用一致的逻辑。

如果要发送空字符串,请将字典元素设置为空字符串而不是None

我有一个空白值的类似问题,这是我的解决方法。 我将数据作为 json 字符串发送,并将内容类型标头设置为 application/json。 这似乎按预期发送了整个数据。 花了相当长的时间才弄明白。 希望这可以帮助某人。

import requests
import json

header = {"Content-Type":"application/json"}

data = {
    "xxx": None,
    "yyy": "http://",
    "zzz": 12345
    }

res = requests.post('https://httpbin.org/post', 
                    data=json.dumps(data), headers=header)

obj = json.loads(res.text)

print obj['json']

几天前我有同样的问题,如果你用 json 替换数据它应该对你有用,因为现在None将被发送到正文中。

request('POST', 'http://google.com', json=dict(a=None, b=1))

暂无
暂无

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

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