收到此错误时如何从JSON获取变量:打开流失败:HTTP请求失败

时间:2019-09-16 07:44:41

标签: php json api file-get-contents

因此,我正在使用以下源代码尝试检索JSON数据并解析为PHP字符串变量:

<?php

$jsonfile3 = file_get_contents("https://www.quandl.com/api/v3/datasets/CHRIS/CME_C1.json");
$jsondata3 = json_decode($jsonfile3);

$cbot_date1 = $jsondata3->dataset->data[0][0];

 echo $cbot_date1; 

 ?>

当我在浏览器中使用该URL时,我可以看到所有数据。但是,当我尝试运行脚本时,出现以下错误:

  

无法打开流:HTTP请求失败!

我在stackoverflow上看到过类似的帖子,但是源代码与我使用的代码有些不同,因此我有些困惑,希望您的帮助。我使用的同一代码已与其他API / JSON数据源一起正常工作。

请让我知道上面示例中显示的特定于源代码的所有可能解决方案。任何帮助是极大的赞赏。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以为此使用php curl

根据您的代码(未经测试):

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://www.quandl.com/api/v3/datasets/CHRIS/CME_C1.json",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Accept: */*",
    "Accept-Encoding: gzip, deflate",
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    "Host: www.quandl.com",
    "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if (!$err) {

  $jsondata3 = json_decode($response);

  $cbot_date1 = $jsondata3->dataset->data[0][0];

  echo $cbot_date1; 

} else {
  echo "cURL Error #:" . $err;
}

说明:

  • 首次初始化卷曲
  • 向您要的url发送请求
  • 获取响应/错误
  • 检查是否有错误
  • 如果不解析json并显示数据。
  

注意:我还注意到您要的数据为1010.75 KB(很小)。平均请求时间为3.41s(短时间)。卷毛可能会给出超时错误。这就是为什么我添加30秒的CURLOPT_TIMEOUT


经过一些测试,我得出结论认为匿名呼叫的限速开始生效。

QELx01 429 You have exceeded your daily call limit as an anonymous user.

我建议您获取一个api密钥,并在此?api_key=YOURAPIKEY处输入网址。

  

速率限制:您还评论说,由于没有卷曲错误,但json中存在速率限制错误,因此您获得了白页。 Quandl.com的速率限制文档