从 Wowza Rest API 使用 cURL 发出 HTTP GET 请求
Make HTTP GET request with cURL from Wowza Rest API
我以前从未使用过cURL,我认为我在学习中遇到了障碍。我正在尝试向使用 Rest API 到 return JSON 结果的 Wowza 服务器发出 HTTP GET 请求。 URL 实际上 return 在 XML 中,但 Wowza 支持人员说我可以通过添加内容类型在 JSON 中获得响应,就像我所做的那样。
$url = 'http://DOMAINNAME:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/live/instances/_definst_/incomingstreams/ncopeland';
$cURL = curl_init();
curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_HTTPGET, true);
curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json;charset=utf-8',
'Accept: application/json'
));
$result = curl_exec($cURL);
$result = json_decode($result,true);
curl_close($cURL);
响应应该是这样的。
{
"serverName": "_defaultServer_",
"sourceIp": "ncopeland",
"isPTZEnabled": false,
"applicationInstance": "_definst_",
"name": "ncopeland",
"isRecordingSet": false,
"isStreamManagerStream": true,
"isPublishedToVOD": false,
"isConnected": true,
"ptzPollingInterval": 2000
}
但是,响应被 return 编辑并格式化为这样。
{"serverName":"_defaultServer_","sourceIp":"ncopeland","isPTZEnabled":false,"applicationInstance":"_definst_","name":"ncopeland","isRecordingSet":false,"isStreamManagerStream":true,"isPublishedToVOD":false,"isConnected":false,"ptzPollingInterval":2000}
如何格式化它以便将它们放入可用变量中。实际上,我只需要从响应中得到 "name" 和 "isConnected",这样我就可以更新数据库中的字段。我真正需要的只是 "name" 和 "isConnected" 这样我就可以像这样更新数据库中的字段。
Array (
[serverName] => _defaultServer_
[sourceIp] => ncopeland
[isPTZEnabled] => false
[applicationInstance] => _definst_
[name] => ncopeland
[isRecordingSet] => false
[isStreamManagerStream] => true
[isPublishedToVOD] => false
[isConnected] => false
[ptzPollingInterval] => false
)
所以我可以像这样将 $obj 变量用作数组。
echo $obj['name'];
echo $obj['isConnected'];
我不确定你错过了什么,一切都应该按照你的代码预期的那样工作。事实上,json returns 没有换行符的数据不会改变以后数据的使用方式。
$jsondata = '{"serverName":"_defaultServer_","sourceIp":"ncopeland","isPTZEnabled":false,"applicationInstance":"_definst_","name":"ncopeland","isRecordingSet":false,"isStreamManagerStream":true,"isPublishedToVOD":false,"isConnected":false,"ptzPollingInterval":2000}';
$result = json_decode($jsondata,true); //is array
var_dump ($result['serverName']);
var_dump ($result['isConnected']);
除此之外,请记住,您不能回显布尔值。
顺便说一句,在我看来,使用对象比数组更简单。
$jsondata = '{"serverName":"_defaultServer_","sourceIp":"ncopeland","isPTZEnabled":false,"applicationInstance":"_definst_","name":"ncopeland","isRecordingSet":false,"isStreamManagerStream":true,"isPublishedToVOD":false,"isConnected":false,"ptzPollingInterval":2000}';
$result = json_decode($jsondata);
var_dump ($result->serverName);
var_dump ($result->isConnected);
毕竟我的代码没有任何问题。来看看我的托管服务器解决方案,我从 Bluehost 使用的软件包阻止了我通过 cURL 发出 http 请求所需的端口。我能够升级到专用 IP 以获得我需要打开的端口,这样它就可以工作并且从那以后一直工作得很好。
我以前从未使用过cURL,我认为我在学习中遇到了障碍。我正在尝试向使用 Rest API 到 return JSON 结果的 Wowza 服务器发出 HTTP GET 请求。 URL 实际上 return 在 XML 中,但 Wowza 支持人员说我可以通过添加内容类型在 JSON 中获得响应,就像我所做的那样。
$url = 'http://DOMAINNAME:8087/v2/servers/_defaultServer_/vhosts/_defaultVHost_/applications/live/instances/_definst_/incomingstreams/ncopeland';
$cURL = curl_init();
curl_setopt($cURL, CURLOPT_URL, $url);
curl_setopt($cURL, CURLOPT_HTTPGET, true);
curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json;charset=utf-8',
'Accept: application/json'
));
$result = curl_exec($cURL);
$result = json_decode($result,true);
curl_close($cURL);
响应应该是这样的。
{
"serverName": "_defaultServer_",
"sourceIp": "ncopeland",
"isPTZEnabled": false,
"applicationInstance": "_definst_",
"name": "ncopeland",
"isRecordingSet": false,
"isStreamManagerStream": true,
"isPublishedToVOD": false,
"isConnected": true,
"ptzPollingInterval": 2000
}
但是,响应被 return 编辑并格式化为这样。
{"serverName":"_defaultServer_","sourceIp":"ncopeland","isPTZEnabled":false,"applicationInstance":"_definst_","name":"ncopeland","isRecordingSet":false,"isStreamManagerStream":true,"isPublishedToVOD":false,"isConnected":false,"ptzPollingInterval":2000}
如何格式化它以便将它们放入可用变量中。实际上,我只需要从响应中得到 "name" 和 "isConnected",这样我就可以更新数据库中的字段。我真正需要的只是 "name" 和 "isConnected" 这样我就可以像这样更新数据库中的字段。
Array (
[serverName] => _defaultServer_
[sourceIp] => ncopeland
[isPTZEnabled] => false
[applicationInstance] => _definst_
[name] => ncopeland
[isRecordingSet] => false
[isStreamManagerStream] => true
[isPublishedToVOD] => false
[isConnected] => false
[ptzPollingInterval] => false
)
所以我可以像这样将 $obj 变量用作数组。
echo $obj['name'];
echo $obj['isConnected'];
我不确定你错过了什么,一切都应该按照你的代码预期的那样工作。事实上,json returns 没有换行符的数据不会改变以后数据的使用方式。
$jsondata = '{"serverName":"_defaultServer_","sourceIp":"ncopeland","isPTZEnabled":false,"applicationInstance":"_definst_","name":"ncopeland","isRecordingSet":false,"isStreamManagerStream":true,"isPublishedToVOD":false,"isConnected":false,"ptzPollingInterval":2000}';
$result = json_decode($jsondata,true); //is array
var_dump ($result['serverName']);
var_dump ($result['isConnected']);
除此之外,请记住,您不能回显布尔值。
顺便说一句,在我看来,使用对象比数组更简单。
$jsondata = '{"serverName":"_defaultServer_","sourceIp":"ncopeland","isPTZEnabled":false,"applicationInstance":"_definst_","name":"ncopeland","isRecordingSet":false,"isStreamManagerStream":true,"isPublishedToVOD":false,"isConnected":false,"ptzPollingInterval":2000}';
$result = json_decode($jsondata);
var_dump ($result->serverName);
var_dump ($result->isConnected);
毕竟我的代码没有任何问题。来看看我的托管服务器解决方案,我从 Bluehost 使用的软件包阻止了我通过 cURL 发出 http 请求所需的端口。我能够升级到专用 IP 以获得我需要打开的端口,这样它就可以工作并且从那以后一直工作得很好。