【问题标题】:Make HTTP GET request with cURL from Wowza Rest API使用来自 Wowza Rest API 的 cURL 发出 HTTP GET 请求
【发布时间】:2017-03-11 21:24:56
【问题描述】:

我以前从未使用过 cURL,我认为我在学习中遇到了障碍。我正在尝试向我的 Wowza 服务器发出 HTTP GET 请求,该服务器使用 Rest API 返回 JSON 结果。该 URL 实际上以 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
}

但是,响应被返回并像这样格式化。

{"serverName":"_defaultServer_","sourceIp":"ncopeland","isPTZEnabled":false,"applicationInstance":"_definst_","name":"ncopeland","isRecordingSet":false,"isStreamManagerStream":true,"isPublishedToVOD":false,"isConnected":false,"ptzPollingInterval":2000}

我怎样才能格式化它,这样我才能把它们变成可用的变量。我真正需要的只是响应中的“名称”和“isConnected”,因此我可以更新数据库中的字段。我真正需要的只是响应中的“名称”和“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'];

【问题讨论】:

    标签: php json rest curl wowza


    【解决方案1】:

    我不确定您缺少什么,一切都应该按照您的代码的预期工作。事实上,json 返回没有换行符的数据,不会改变以后使用数据的方式。

    $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);
    

    【讨论】:

      【解决方案2】:

      毕竟我的代码没有任何问题。来看看我的托管服务器解决方案,我从 Bluehost 使用的包阻止了我通过 cURL 发出 http 请求所需的端口。我能够升级到专用 IP 以打开我需要的端口,这样它就可以工作并且从那以后一直工作得很好。

      【讨论】:

        猜你喜欢
        • 2017-05-05
        • 2020-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-14
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多