如何在php中使用CURL调用REST API?

时间:2016-05-11 11:59:54

标签: php json rest curl

当我尝试使用curl调用API时,我遇到了问题。我的PHP代码如下所示:

<html>
<head>
<body>
<span style="z-index:50;font-size:0.9em;">
<img src="https://theysaidso.com/branding/theysaidso.png" height="20"  width="20" alt="theysaidso.com"/>
<a href="https://theysaidso.com" title="Powered by quotes from   theysaidso.com" style="color: #9fcc25; margin-left: 4px; vertical-align:  middle;">
theysaidso.com</a></span>
<?php
       $service_url = 'http://quotes.rest/qod.json';
       $curl = curl_init($service_url);
       curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($curl, CURLOPT_POST, false);
       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
       $curl_response = curl_exec($curl);
       curl_close($curl);
       $json_objekat=json_decode($curl_response);
       echo $json_objekat->contents->quotes->quote.'<br>';
       echo $json_objekat->contents->quotes->author.'<br>';    
?>
</body>
</head>

此代码在WAMP服务器的根目录中保存为php文件。我使用WAMP服务器。它写在这个网站http://quotes.rest/qod.json上,你必须插入这个HTML。当我在WAMP上打开这个php页面时,它显示警告:

  

注意:未定义的属性:stdClass :: $ contents in   第18行的C:\ wamp \ www \ IzdavackaKuca \ javniServis.php

     

注意:尝试获取非对象的属性   第18行的C:\ wamp \ www \ IzdavackaKuca \ javniServis.php

     

注意:尝试获取非对象的属性   第18行的C:\ wamp \ www \ IzdavackaKuca \ javniServis.php

     

注意:未定义的属性:stdClass :: $ contents in   第19行的C:\ wamp \ www \ IzdavackaKuca \ javniServis.php

     

注意:尝试获取非对象的属性   第19行的C:\ wamp \ www \ IzdavackaKuca \ javniServis.php

     

注意:尝试获取非对象的属性   第19行的C:\ wamp \ www \ IzdavackaKuca \ javniServis.php

此链接http://quotes.rest/qod.json上的JSON如下所示:

{
    "success": {
        "total": 1
    },
    "contents": {
        "quotes": [
            {
                "quote": "A loser doesn't know what he'll do if he loses, but talks about what he'll do if he wins, and a winner doesn't talk about what he'll do if he wins, but knows what he'll do if he loses.",
                "length": "184",
                "author": null,
                "tags": [
                    "failure",
                    "inspire",
                    "knowledge",
                    "winning"
                ],
                "category": "inspire",
                "date": "2016-05-11",
                "title": "Inspiring Quote of the day",
                "background":       "https://theysaidso.com/img/bgs/man_on_the_mountain.jpg",
                "id": "KhjRMynny89MKxcGkEKF_QeF"
             }
        ]
    }
}

当我在php中将最后两行更改为:

   echo $json_objekat['contents']['quotes']['quote'].'<br>';
   echo $json_objekat['contents']['quotes']['author'].'<br>';   

警报:

  

致命错误:无法使用stdClass类型的对象作为数组   第18行的C:\ wamp \ www \ IzdavackaKuca \ javniServis.php

当我编码时,我真的不知道如何调用此服务器:

<?php
   $defaults = array(
        CURLOPT_URL             => 'http://quotes.rest/qod.json',
        CURLOPT_POST            => false,
        CURLOPT_HEADER          => false,
        CURLOPT_SSL_VERIFYPEER  => false,
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_SSL_VERIFYHOST  => false,
    );
    $curl               = curl_init();
    curl_setopt_array($curl, $defaults);
    $curl_response      = curl_exec($curl);
    $json_objekat       = json_decode($curl_response);

    // DUMP THE CURL-ERROR INFORMATION:
    var_dump(curl_error($curl));
    curl_close($curl);
?> 

警报:

  

string&#39;&#39; (长度= 0)

请帮忙!

3 个答案:

答案 0 :(得分:0)

问题是因为您正在错误地访问引用和作者。 print_r($json_objekat)的输出表示:

  

内容是stdClass对象
  引号是数组
  引用再次引用    0 作为索引,又是stdClass对象

因此,请尝试按如下方式访问引文和作者:

$json_objekat->contents->quotes[0]->quote

$json_objekat->contents->quotes[0]->author

答案 1 :(得分:0)

我假设这是你打算做的事情:

    <?php
        $service_url     = 'http://quotes.rest/qod.json';
        $curl            = curl_init($service_url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POST, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $curl_response   = curl_exec($curl);
        curl_close($curl);
        $json_objekat    = json_decode($curl_response);
        $quotes          = $json_objekat->contents->quotes;

        foreach($quotes as $intKey=>$objQuote){
            echo $objQuote->title       . '<br>';
            echo $objQuote->author      . '<br>';
            echo $objQuote->quote       . '<br>';
            echo $objQuote->background  . '<br>';
        }
    ?>

但请注意,每小时使用相同的IP地址不能超过10个请求。 因此,一旦您完成10个请求,您将被阻止,您必须等待另外1小时才能继续处理您的请求。 希望这有助于......

答案 2 :(得分:0)

<?php
$conn = mysqli_connect("localhost","root","","mydatabase");

if(!$conn){
    die("Connection failed: " . mysqli_connect_error());
}

if(!function_exists("curl_init")) die("cURL extension is not installed");
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://localhost/ketan/all_user.php");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
//print_r(json_decode($result));//To Decode Result
?>

Output

Output

all_user.php

<?php
$conn = mysqli_connect("localhost","root","","mydatabase");

if(!$conn){
    die("Connection failed: " . mysqli_connect_error());
}

$result = mysqli_query($conn,"SELECT * FROM tblUser");

$data = array();

while ($row = mysqli_fetch_array($result)) {
    /*$result = array();
    $result['userId'] = $row['userId'];
    $result['firstName'] = $row['firstName'];
    $result['lastName'] = $row['lastName'];*/
    array_push($data, array('userId'=> $row['userId'],'firstName'=> $row['firstName'], 'lastName'=>$row['lastName'],
        'email'=>$row['email'], 'phoneNumber'=>$row['phoneNumber'], 'userImage'=>"user_images/".$row['userImage']));
}


$return['status']  = true;
$return['message'] = 'Success';
$return['data']    = $data;
header('Content-Type: application/json');
echo json_encode($return, JSON_PRETTY_PRINT);
$conn->close();

?>