【问题标题】:PHP curl is changing JSON before posting itPHP curl 在发布之前更改 JSON
【发布时间】: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 的请求按预期工作。

标签: php python django curl


【解决方案1】:

我不是 PHP 专家,但这可能无关紧要:如果 request.DATAQueryDict,您可以简单地使用 arealdict = request.DATA.dict() 得到真正的 dict。如果有任何重复的字段,这将只选择它们的多个值中的一个,但这对于您的特定用例并不重要,因为它似乎没有重复的字段。

【讨论】:

  • 我正在这样做,但结果是一个字典,其中所有键值都在键字段中。我无法更改服务器端。我可能会把 PHP 换成我更熟悉的另一种语言。
【解决方案2】:

后来发现我在登录代码中覆盖了 application/json 标头。这就是为什么有些请求似乎可以正常工作的原因。

由于未设置内容类型,Django 将请求视为表单帖子,从而导致请求损坏。数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2019-06-03
    • 2020-08-14
    • 2016-08-10
    相关资源
    最近更新 更多