簡體   English   中英

curl 的 json_decode 反序列化錯誤

[英]json_decode deserialization error with curl

我創建了一個運行良好的 Rest API,但我注意到了一件奇怪的事情。 為了反序列化客戶端發送的內容,我使用以下代碼:

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

如果我使用POSTMAN (Chrome 擴展程序)發送請求,則一切正常,請參閱:

在此處輸入圖片說明

但是如果我將curlMINGW64一起MINGW64 ,我會得到NULL

在此處輸入圖片說明

現在,在這兩種情況下,我都檢查了此代碼的編碼類型:

$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 在這個網站上,我看到這個數字對應一個錯誤:

5 = JSON_ERROR_UTF8

但我不知道出了什么問題。

由於您要在正文中提交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

將編碼轉換為 utf-8 對我有用。 $retorno_transaction = mb_convert_encoding($retorno_transaction, 'UTF-8');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM