PATCH调用返回“该实体不是格式正确的'application / json-patch + json'文档”]] << [

问题描述 投票:1回答:1
今天,我第一次使用PHP测试对API的PATCH调用,到目前为止,我还没有弄清楚如何使它们工作。

我想将一个具有其值的新参数添加到已经存在的一组参数中,我将CURLOPT_CUSTOMREQUEST =>设置为“ PATCH”作为选项,并将“ Content-Type:application / json-patch + json”设置为正确的标题。尽管我的身体是一个数组,当我将其解析为JSON时首先指出该错误,但现在它表示该实体仍然不是格式正确的application / json-patch + json。

我完全不知道为什么会这样,因为我看到的其他示例与我写的内容没有什么不同。

这是现有参数集:

{ "ac": "774", "allowed_clis": [ "34774554114" ], "cc": "34", "cli": "34774554114", "id": 1512, "subscriber_id": 1512 }

我想要达到的目标:

{ "ac": "774", "allowed_clis": [ "34774554114" ], "cc": "34", "cli": "34774554114", "id": 1512, "e164_to_ruri": true, "subscriber_id": 1512 }

这是我的代码:

$dataArray = [ 'op' => 'add', 'path' => '/e164_to_ruri', 'value' => true ]; function setPreferences($dataArray, $uri, $token){ $ch= curl_init(); $options = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_CUSTOMREQUEST => "PATCH", CURLOPT_POSTFIELDS => $dataArray, CURLOPT_URL => $uri, CURLOPT_HTTPHEADER => array("Content-Type: application/json-patch+json", "Authorization: Basic ".$token) ); curl_setopt_array($ch, $options); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $response; } $response = setPreferences($dataArray, $uri, $token); $response = json_decode($response, true); print_r($response);

最后,我得到的答复:

Array ( [message] => The entity is not a well-formed 'application/json-patch+json' document. Malformed JSON: Expected array or object at line 0, offset 0 [code] => 400 )

对于我有限的知识,$ dataArray是格式良好的数组。所以我不知道这个回应是从哪里来的。非常感谢您提供的帮助!

今天,我第一次使用PHP测试对API的PATCH调用,到目前为止,我还没有弄清楚如何使它们工作。我想将一个具有其值的新参数添加到已经......>

php arrays json rest php-curl
1个回答
1
投票
正如@UlrichEckhardt指出的,我要做的就是将数据转换为JSON对象的JSON数组:

function setPreferences($uri, $token){ $ch= curl_init(); $options = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_CUSTOMREQUEST => "PATCH", CURLOPT_POSTFIELDS => '[{"op": "add", "path": "/e164_to_ruri", "value":true}]', CURLOPT_URL => $uri, CURLOPT_HTTPHEADER => array("Content-Type: application/json-patch+json", "Authorization: Basic ".$token) ); curl_setopt_array($ch, $options); $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $response; } $response = setPreferences($dataArray, $uri, $token); $response = json_decode($response, true); print_r($response);

© www.soinside.com 2019 - 2024. All rights reserved.