【发布时间】:2015-01-14 21:44:25
【问题描述】:
我有一个用 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 包含 {"name":"a","description":"b","props":{"Notes":"c"}}。
当此查询到达后端时,我得到以下信息:
(Pdb) print request.DATA
<QueryDict: {u'{"name":"a","description":"b","props":{"Notes":"c"}}': [u'']}>
PHP 在发送之前对我的 JSON 做了什么?如何按照上面的 curl 请求使用 PHP 发布完全相同的数据?
- 它确实适用于没有嵌套 JSON 的请求
【问题讨论】:
-
啊,你问的是不同的东西;现在我修复了格式以显示查询字典。
-
我怀疑 PHP 是 做 什么。特别是因为
$data_string是正确的。更好的问题是你在做什么?您是否嗅探了流量以查看 PHP 是否确实发送了 Python 接收到的内容? -
我确信 PHP 没有做我原来的 curl 脚本正在做的事情,而这正是我想要它做的事情。我没有嗅探数据。 curl、swidt、java、angular 和 python 的请求按预期工作。