json_decode无法使用curl

时间:2016-03-20 15:04:56

标签: php api rest curl encode

我已经创建了一个运行良好的Rest API,但我注意到了一件奇怪的事情。为了反序列化客户端发送的内容,我使用以下代码:

var_dump(json_decode(file_get_contents("php://input"), true));

如果我使用POSTMAN(Chrome扩展程序)发送请求,一切正常,请参阅:

enter image description here

但如果我将curlMINGW64一起使用,我会NULL

enter image description here

现在在这两种情况下,我检查了使用此代码的编码类型:

$content = file_get_contents("php://input");
$encode =  mb_detect_encoding($content, "auto");
$json = mb_convert_encoding($content, $encode);
var_dump($json);

并返回UTF-8

我不明白为什么curl MINGW64控制台无法工作且扩展工作正常,会发生什么?

更新

我已执行此功能:json_last_error()并已返回5,在此site我看到该号码对应错误:

5 = JSON_ERROR_UTF8

但我不知道出了什么问题。

2 个答案:

答案 0 :(得分:1)

由于您在正文中提交JSON数据,您需要告诉服务器内容类型,否则cURL将其发送为application/x-www-form-urlencoded

此外,任何UTF-8字符都需要以\uXXXX格式编码才能拥有有效的JSON字符串。

尝试:

curl -i -H "token: company" \
-H "Content-type: application/json" \
-d '{"Code": "R89d", "Descri": "Questo \u00E8 un test"}' \
-X PUT http://localhost/api/customer/add

编辑:

不确定您的开始时间,但您可以使用以下两个命令为cURL提供正确的JSON字符串。

var=$(php -r 'echo json_encode(["Code" => "R89d", "Descri" => "Questo è un test"]);')
curl -v -H "Content-type: application/json" -d "$var" http://sandbox/test.php

答案 1 :(得分:0)

将编码转换为 utf-8 对我有用。 $retorno_transaction = mb_convert_encoding($retorno_transaction, 'UTF-8');