简体   繁体   中英

How to call REST API using CURL in php?

I have problem when I am trying to call API using curl. My php code looks like this:

<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>

This code is saved as php file in my root directory on WAMP server. I use WAMP server. And it is written on this website http://quotes.rest/qod.json that you must insert this html too. When I open this php page on WAMP it shows alert:

Notice: Undefined property: stdClass::$contents in C:\\wamp\\www\\IzdavackaKuca\\javniServis.php on line 18

Notice: Trying to get property of non-object in C:\\wamp\\www\\IzdavackaKuca\\javniServis.php on line 18

Notice: Trying to get property of non-object in C:\\wamp\\www\\IzdavackaKuca\\javniServis.php on line 18

Notice: Undefined property: stdClass::$contents in C:\\wamp\\www\\IzdavackaKuca\\javniServis.php on line 19

Notice: Trying to get property of non-object in C:\\wamp\\www\\IzdavackaKuca\\javniServis.php on line 19

Notice: Trying to get property of non-object in C:\\wamp\\www\\IzdavackaKuca\\javniServis.php on line 19

JSON on this link http://quotes.rest/qod.json looks like this:

{
    "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"
             }
        ]
    }
}

When I change last two lines in php to this:

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

it alerts:

Fatal error: Cannot use object of type stdClass as array in C:\\wamp\\www\\IzdavackaKuca\\javniServis.php on line 18

I realy don`t know how to call this server, when I code:

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

it alerts:

string '' (length=0)

Please help!

The issue is because you are accesing quote and author incorrectly. Output of print_r($json_objekat) says that:

contents is stdClass Object
quotes is array
again quotes is having 0 as index which is again stdClass Object

So, try accessing quote and author as follows:

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

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

I am assuming this is what you intend to do:

    <?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>';
        }
    ?>

But be aware that you cannot make more than 10 Request per Hour using the same IP Address. So once you make up to 10 Requests, you'd be blocked and you have to wait for another 1 Hour to continue with your Requests. Hope this helps......

<?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

产量

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

?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM