一尘不染

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

python

看来,当键data的值为时None,请求不包含该键。

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

为什么会这样呢?我期望有一个空字符串,或类似json.dumps(d)whereNone呈现为的东西null。我敢肯定有充分的理由-
只是好奇。(我能想到的一件事可能就是POST请求可能没有编码nullNone不可用-是这样吗?)

另外感到好奇的是-为什么requests不理会这些数据而不是抛出错误?


阅读 322

收藏
2021-01-20

共1个答案

一尘不染

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

我在requests.Request()文档中找不到专门提到的内容,但是在“在URL传递参数”中说:

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

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

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

2021-01-20