似乎当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。我相信有一个很好的理由--只是好奇它是什么。(我能想到的一件事是,也许POST请求没有可用的null或None编码--这是真的吗?)
另外很奇怪--为什么requests会默默地忽略这些数据,而不是抛出一个错误?
发布于 2016-03-29 05:51:34
将字典元素设置为None是您明确表示不希望将该参数发送到服务器的方式。
我在requests.Request()文档中找不到特别提到这一点,但在Passing Parameters in URLs中它说:
请注意,任何值为None的字典键都不会添加到
的查询字符串中。
显然,它对POST请求也使用一致的逻辑。
如果要发送空字符串,请将字典元素设置为空字符串,而不是None。
发布于 2018-02-01 04:41:52
我遇到了类似的空值问题,这就是我的变通方法。我将数据作为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']发布于 2018-01-02 05:29:43
几天前我也有过同样的问题,如果你用json替换数据,它应该可以为你工作,因为现在None将在主体中发送。
request('POST', 'http://google.com', json=dict(a=None, b=1))https://stackoverflow.com/questions/36271697
复制相似问题