我目前正在测试创建一个 RESTful json API,在此过程中,我一直在测试通过 curl 发布数据,主要是为了查看是否可以通过请求登录。即使我破解它工作,我也不知道该怎么做,但这是一个单独的问题。
我正在向我的应用程序发送以下 POST 请求:
curl -X POST http://localhost:6543/users/signin -d '{"username":"a@a.com","password":"password"}'
当我看到我的请求中有什么数据时,输出非常奇怪:
ipdb> self.request.POST
MultiDict([('{"username":"a@a.com","password":"password"}', '******')])
ipdb> self.request.POST.keys()
['{"username":"a@a.com","password":"password"}']
ipdb> self.request.POST.values()
[u'']
所以,它是一个 MultiDict,我的 json 对象作为字符串键,空字符串作为它的值?!这似乎不对。
删除我的 json 声明中的单引号给出以下内容:
ipdb> self.request.POST
MultiDict([('username:a@a.com', u'')])
有谁知道为什么我的数据可能无法正确发布?
更新:
需要明确的是,我使用的标头实际上是 application/x-www-form-urlencoded。
ipdb> self.request.headers['CONTENT-TYPE']
'application/x-www-form-urlencoded'
我发现的是,由于某种原因,当我执行以下操作时,使用requests库可以工作:
In [49]: s.post('http://localhost:6543/users/signin', data=[('username', 'a@a.com'), ('password', 'password')], headers={'content-type': 'application/x-www-form-urlencoded'})
Out[49]: <Response [200]>
但是,它不能像预期的那样与 curl 一起工作的事实仍然令人不安。