php - 使用 PHP 转换 JSON 数组中的 Curl 响应字符串
问题描述
我正在使用 Curl 从 REST API 获取请求。这是我的代码:
#Curl init
$ch = curl_init('https://192.168.0.1/api/invoke/LicenseRequest');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Connection: Keep-Alive',
'Accept: application/json'
));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
#Username und PW
curl_setopt($ch, CURLOPT_USERPWD, "****:****");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
#Post
$post = [];
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
curl_close($ch);
当我echo $response
出现时(gettype
返回的字符串):
HTTP/1.1 200 OK Cache-Control: no-cache,private,no-store,must-revalidate,max-stale=0,post-check=0,pre-check=0 Pragma: no-cache Content-Length: 733 Content-Type: application/json Expires: Wed, 23 May 2018 09:53:48 GMT Server: Microsoft-***** Date: Thu, 24 May 2018 09:53:48 GMT { "error": null, "token": null, "statusVersion": 2, "statusCode": "succeeded", "percentProgress": null, "statusText": null, "result": { "productKey": "************", "productVersion": "10.2.3.12921", "timestamp": "2018-05-24T09:53:48.2029026Z", "machineName": "******", "configuredInstances": 3, "configuredInstanceHosts": 2, "configuredClientAccessServers": 1, "instanceData": [ { "id": "l_container1", "usedLicenseCount": 912 }, { "id": "l_container2", "usedLicenseCount": 7 }, { "id": "l_container3", "usedLicenseCount": 2 } ] }, "logOutput": null }
到目前为止,我认为很好。现在我想解析“instanceData”。我想我必须使用json_decode($response, true);
来创建一个数组。所以:
$result = json_decode($response, true);
echo $result;
但是当我打印每个回声时,该字段是空的。我没有收到错误,但该网站是空白的。
对不起我的英语,我希望你能帮助我。
解决方案
如果设置CURLOPT_HEADER
as well CURLOPT_RETURNTRANSFER
,则返回的响应将在单个字符串中包含标头和正文。
如果您只对正文感兴趣,请删除设置CURLOPT_HEADER
选项的行,您的响应将仅包含 JSON。然后,您可以使用json_decode
(正如您已经尝试过的那样),并执行您需要的任何处理。
如果您也对标头感兴趣,则需要将它们与响应的其余部分分开:
$response = curl_exec($ch);
$info = curl_getinfo($ch);
$response = [
'headers' => substr($response, 0, $info["header_size"]),
'body' => substr($response, $info["header_size"]),
];
现在,$response['headers']
将包含标头(作为字符串),$response['body']
并将包含 JSON。
推荐阅读
- javascript - Uncaught (in promise) undefined - Vue-router
- jquery - 如何检查复选框是否被选中?
- text - 如何过滤不包含特定文本的列 - Impala / Hue
- wpf - 每个用户控件的不同 ItemsSource
- flutter - TextFormField,更改图标和文本颜色
- c - 链接到 ELF 文件的文本文件 - _binary_file_size 信息是垃圾
- python - Keras 中的 3D 卷积是否适用于 RGB 视频?
- r - 包括子组或合并 OLS 的面板数据
- php - 在 Woocommerce 循环中间插入突出显示的产品 div
- akka - 基于 akka-cluster 的应用程序的自动横向扩展/缩减设置