首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能使用Python的`requests`库在POST请求中发送`None`作为数据?

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

Stack Overflow用户
提问于 2016-03-29 05:40:36
回答 3查看 14.3K关注 0票数 5

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

代码语言:javascript
复制
>>> req = requests.Request('POST', 'http://google.com', data=dict(a=None, b=1))
>>> req.prepare().body
'b=1'

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

另外很奇怪--为什么requests会默默地忽略这些数据,而不是抛出一个错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-29 05:51:34

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

我在requests.Request()文档中找不到特别提到这一点,但在Passing Parameters in URLs中它说:

请注意,任何值为None的字典键都不会添加到

的查询字符串中。

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

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

票数 11
EN

Stack Overflow用户

发布于 2018-02-01 04:41:52

我遇到了类似的空值问题,这就是我的变通方法。我将数据作为json字符串发送,并将内容类型标头设置为application/json。这似乎像预期的那样发送了整个数据。花了相当长的时间才弄清楚。希望这对某些人有帮助。

代码语言:javascript
复制
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']
票数 3
EN

Stack Overflow用户

发布于 2018-01-02 05:29:43

几天前我也有过同样的问题,如果你用json替换数据,它应该可以为你工作,因为现在None将在主体中发送。

代码语言:javascript
复制
request('POST', 'http://google.com', json=dict(a=None, b=1))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36271697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档