【问题标题】:Getting Empty variable in curl using php使用php在curl中获取空变量
【发布时间】:2012-09-05 11:11:26
【问题描述】:

我正在尝试使用 Curl 执行 url,但输出为空。

但是,如果我们在浏览器中复制粘贴相同的 url,我们将获得价值

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22YHOO%22,%22AAPL%22,%22GOOG%22,%22MSFT%22%29&env=http://datatables.org/alltables.env&format=json

但是,当我尝试使用 Curl 在 php 中获取价值时,我得到了 Null

php代码

 <?php

$BASE_URL = "http://query.yahooapis.com/v1/public/yql"; 



    // Form YQL query and build URI to YQL Web service
    $yql_query = 'select * from yahoo.finance.quotes where symbol in ("YHOO","AAPL","GOOG","MSFT")&env=http://datatables.org/alltables.env';
    $yql_query_url = $BASE_URL . "?q=" .$yql_query. "&format=json";


    // Make call with cURL
    $session = curl_init($yql_query_url);
    curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
    $json = curl_exec($session);


    echo "<pre>";
    print_r($json);exit;

?>

有什么建议吗??????

【问题讨论】:

  • 检查curl_error的输出。
  • 在发帖时仔细检查问题。当您发布此内容时,我们无法看到完整的代码。

标签: php curl yahoo-api yahoo-finance


【解决方案1】:

您需要为此使用json_decode

查看手册 -

http://php.net/manual/en/function.json-decode.php

现在检查这个工作代码--(至少在我结束时工作)--

<?php

$yql_query_url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22YHOO%22,%22AAPL%22,%22GOOG%22,%22MSFT%22%29&env=http://datatables.org/alltables.env&format=json"; 

    // Make call with cURL
    $session = curl_init($yql_query_url);
    curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
    $json = curl_exec($session);

$jsonnew=json_decode($json,true);

    echo "<pre>";
    print_r($jsonnew);

?>

【讨论】:

  • print_r($json);exit;这是空的
  • @shail 实际上你提到的 URL 是以 json 格式获取数据,所以你需要实际解码数据..检查我刚刚发布的链接
  • 由于变量“$json”为空,所以没有使用json_decode
  • @jason 解码将在我们得到 jason 输出后工作。由于 curl 的输出是空的,所以 jason_decode 也是空的
  • @shail 代码工作正常..我猜你在查询中遇到问题试试这个然后让我知道 --- $query = 'select * from yahoo.finance.quotes where symbol in ("YHOO","AAPL","GOOG","MSFT")&env=datatables.org/alltables.env&format=json';
【解决方案2】:

以下代码对我有用

<?php

$BASE_URL = "http://query.yahooapis.com/v1/public/yql"; 
    $query = 'select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28"YHOO","AAPL","GOOG","MSFT"%29&env=http://datatables.org/alltables.env&format=json';
    echo $yql_query_url = $BASE_URL . "?q=" .$query;


    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$yql_query_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $content = curl_exec ($ch);
    curl_close ($ch);
    print_r($content);
?>

查询必须正确编码。

检查一下

【讨论】:

    【解决方案3】:

    我得到了错误。

    在 CURL 中使用之前,我必须使用“urlencode”函数对 Url 进行编码

    而不是

    $yql_query_url = $BASE_URL . "?q=" .$yql_query. "&format=json";
    

    我必须使用

    $yql_query_url = $BASE_URL . "?q=" .urlencode($yql_query). "&format=json";
    

    它的工作原理:) 哈哈

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      相关资源
      最近更新 更多