我有一个用django编写的API,它能够正确地处理以下请求。
curl -H "Content-Type: application/json" -d '{"name":"a","description":"b","props": {"Notes":"c"}}' http://127.0.0.1:8000/en/api/asset/ -H 'Authorization: Token 114ada7e487b2cdbc9277d377e4d20640a606bb2'如果在Django侧打印request.DATA,将得到以下结果:
(Pdb) print request.DATA
{u'props': {u'Notes': u'c'}, u'name': u'a', u'description': u'b'}我有下面的PHP代码,我想用它来发出完全相同的请求
$data_string = json_encode($values['json_parameters']);
error_log($data_string, 0);
//curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
error_log("Method: ".$method, 0);
if ($method == 'POST') {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
}$data_string包含{“名称”:“a”,“描述”:“b”,“道具”:{“Notes”:“c”}。
当这个查询到达后端时,我得到以下信息:
(Pdb) print request.DATA
<QueryDict: {u'{"name":"a","description":"b","props":{"Notes":"c"}}': [u'']}>PHP在发送JSON之前对它做了什么?如何使用PHP发布与上面的curl请求完全相同的数据?
发布于 2015-01-14 21:57:27
我不是PHP专家,但这可能并不重要:如果request.DATA是QueryDict,您可以使用arealdict = request.DATA.dict()获取真正的dict。如果有任何重复字段,这只会从它们的多个值中选择一个,但这对于您的特定用例来说并不重要,因为它似乎没有重复的字段。
发布于 2015-01-17 17:47:51
后来,我在登录代码中覆盖了应用程序/json头。这就是为什么有些请求似乎运作良好的原因。
没有设置Sinc内容类型,Django将请求视为表单post,这导致了request.DATA的损坏。
https://stackoverflow.com/questions/27953008
复制相似问题