【问题标题】:Get JSON from URL via Curl with https returns Null通过带有 https 的 Curl 从 URL 获取 JSON 返回 Null
【发布时间】:2013-10-31 11:51:07
【问题描述】:

您好,我正在尝试使用 Curl 和 PHP 使用以下代码从 url 从 JSON 文件中获取数据:

<?php
    //  Initiate curl
    $url = "https://panel.virtualcenter360.es/home/api/getdatasample?dateIni=1376524800&dateEnd=1381795200";
    $ch = curl_init($url);
    // Set the url
    curl_setopt($ch, CURLOPT_URL,$url);
    // Execute
    $result=curl_exec($ch);

    $res = iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($result));

    var_dump(json_decode($res, true));

        switch (json_last_error()) {
    case JSON_ERROR_NONE:
        echo ' - No errors';
    break;
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_STATE_MISMATCH:
        echo ' - Underflow or the modes mismatch';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_UTF8:
        echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
    break;
    default:
        echo ' - Unknown error';
    break;
}
    curl_close($ch);
?>

我收到无错误消息,但结果为 NULL。您认为这可能是什么问题?

也许我需要从 Curl 配置一些参数?

谢谢!

【问题讨论】:

    标签: php json curl


    【解决方案1】:

    如果你想使用 curl,你必须这样做:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    

    CURLOPT_SSL_VERIFYPEER
    FALSE 阻止 cURL 验证对等方的证书。可以使用 CURLOPT_CAINFO 选项指定要验证的备用证书,也可以使用 CURLOPT_CAPATH 选项指定证书目录。

    http://php.net/manual/en/function.curl-setopt.php

    【讨论】:

      【解决方案2】:

      如果您只需要获取一些 json 信息,我建议您使用 file_get_contents() 而不是 cURL 函数。

      【讨论】:

      • 我也试过使用 file_get_contents() 像: $result = file_get_contents('panel.virtualcenter360.es/home/api/…); var_dump(json_decode($result, true));但我遇到了错误。
      • $result = file_get_contents('https://panel.virtualcenter360.es/home/api/getdatasample?dateIni=1376524800&amp;dateEnd=1381795200'); var_dump(json_decode($result, true)); 适合我。我建议您使用 Advanced REST Client 进行 chrome 或其他一些工具进行测试。
      • 您好,我已经尝试在在线服务器中使用 file_gets_contents 并且它可以工作。我认为这是从 wamp localhost 服务器尝试时的问题。谢谢!
      【解决方案3】:

      在 Codeigniter 应用程序/库文件夹中

      header('Content-Length: ' . strlen($output)); //Comment line no. 267 of REST_Controller.php
      

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 2013-01-30
        • 1970-01-01
        • 2015-10-24
        • 2017-06-29
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        相关资源
        最近更新 更多