首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP curl在发布JSON之前正在更改JSON

PHP curl在发布JSON之前正在更改JSON
EN

Stack Overflow用户
提问于 2015-01-14 21:44:25
回答 2查看 97关注 0票数 0

我有一个用django编写的API,它能够正确地处理以下请求。

代码语言:javascript
运行
复制
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,将得到以下结果:

代码语言:javascript
运行
复制
(Pdb) print request.DATA
{u'props': {u'Notes': u'c'}, u'name': u'a', u'description': u'b'}

我有下面的PHP代码,我想用它来发出完全相同的请求

代码语言:javascript
运行
复制
$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”}。

当这个查询到达后端时,我得到以下信息:

代码语言:javascript
运行
复制
(Pdb) print request.DATA
<QueryDict: {u'{"name":"a","description":"b","props":{"Notes":"c"}}': [u'']}>

PHP在发送JSON之前对它做了什么?如何使用PHP发布与上面的curl请求完全相同的数据?

  • 它确实适用于没有嵌套JSON的请求
EN

回答 2

Stack Overflow用户

发布于 2015-01-14 21:57:27

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

票数 0
EN

Stack Overflow用户

发布于 2015-01-17 17:47:51

后来,我在登录代码中覆盖了应用程序/json头。这就是为什么有些请求似乎运作良好的原因。

没有设置Sinc内容类型,Django将请求视为表单post,这导致了request.DATA的损坏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27953008

复制
相关文章

相似问题

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