我在這里扯了一點頭發(剩下的)。
在終端上使用 cURL 代碼來更改在線 SIP 服務上的轉發電話號碼(無權訪問 REST API 服務器端):
curl --request PUT --header "Accept: application/json" --header "Authorization: Basic abcdefABCDEFmysecretkey123456" -d '{"forwardings":[{"destination":" 447979123456","timeout":0,"active":true}]}' --header "Content-type: application/json" https://api.sipgate.com/v2/w0/phonelines/p0/forwardings
但是,我在 PHP 中復制此代碼的努力導致了{"error":"cannot parse content"}回應:
$ch = curl_init();
$churl='https://api.sipgate.com/v2/w0/phonelines/p0/forwardings';
$chdata = array(
'forwardings' => array(
'destination' => ' 447979123456',
'timeout' => 0,
'active' => true
)
);
$chdata2 = http_build_query($chdata);
curl_setopt($ch, CURLOPT_URL, $churl);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-type: application/json",
"charset: utf-8",
"Accept: application/json",
"Authorization: Basic abcdefABCDEFmysecretkey123456"
));
curl_setopt($ch, CURLOPT_POSTFIELDS, $chdata2);
$json = curl_exec($ch);
echo $json;
curl_close($ch);
我錯過了什么?
uj5u.com熱心網友回復:
[來自評論}我可能錯了,但我認為 json_encode 不能正確處理嵌套陣列?
json_encode 可以很好地處理它們,您只是沒有提供正確的輸入資料結構。
您的資料中缺少一個陣列級別。'forwardings' => array(...)需要是'forwardings' => array( array(...) )
順便說一句/僅供參考/對于任何可能需要它的人:一種獲得所需資料結構的簡單方法,已經以可用的 PHP 代碼形式,基于現有的 JSON,將是 var_export 和 json_decode 的組合:
var_export(json_decode('{"forwardings":[{"destination":" 447979123456","timeout":0,"active":true}]}', 1));
得到以下結果,
array (
'forwardings' =>
array (
0 =>
array (
'destination' => ' 447979123456',
'timeout' => 0,
'active' => true,
),
),
)
所以你可以$chdata = 在前面打一個a;在最后打一個,然后就完成了。
uj5u.com熱心網友回復:
由于內容型別設定為 JSON,它期望您傳遞的資料是 json 編碼的。
嘗試更換
$chdata2 = http_build_query($chdata);
和
$chdata2 = json_encode($chdata);
更新@CBroe 評論
將 $chdata 陣列更改為
$chdata = array(
'forwardings' => array(
array(
'destination' => ' 447979123456',
'timeout' => 0,
'active' => true
)
)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321174.html
