简体   繁体   中英

CURL Post Request to API Looping Through Database

I've been trying to select values (students data) from mysql database table and looping through database to send to an API using PHP CURL Post request but it's not working.

This is the API body:

{
    "students":[
        {
            "admissionNumber": "2010",
            "class":"js one"
        },
        {
            "admissionNumber": "2020",
            "class":"ss one"
        }
    ],
    "appDomain":"www.schooldomain.com"
}

Parameters I want to send are "admissionNumber" and "class" parameters while "appDomain" is same for all. Here's my code:

if(isset($_POST['submit'])){

       $body = "success";
       $info = "yes";


      class SendDATA
      {
        private $url = 'https://url-of-the-endpoint'; 
        private $username = '';  
        private $appDomain = 'http://schooldomain.com/';  



        // public function to commit the send
        public function send($admNo,$class)
        {
            $url_array=     array('admissionNumber'=>$admNo,'class'=>$class,'appDomain'=>$this-> appDomain);
            $url_string = $data = http_build_query($url_array);

            //   using the curl library to make the request
            $curlHandle = curl_init();
            curl_setopt($curlHandle, CURLOPT_URL, $this->url);
            curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $url_string);
            curl_setopt($curlHandle, CURLOPT_POST, 1);
            $responseBody = curl_exec($curlHandle);
            $responseInfo  = curl_getinfo($curlHandle);
            curl_close($curlHandle);

            return $this->handleResponse($responseBody,$responseInfo);
        }


        private function handleResponse($body,$info)
        {
            if ($info['http_code']==200){ // successful submission
                $xml_obj = simplexml_load_string($body);
                // extract 

                return true;
            }
            else{

                // error handling
                return false;
            }

        }

    }

    $sms = new SendDATA();

        $result = mysqli_query( $mysqli, "SELECT * FROM school_kids");

        while ($row = mysqli_fetch_array($result)) {
                $admNo = $row['admNo']; 
                $class = $row['class']; 
                $sms->send($admNo,$class,"header");

                echo $admNo. " ".$class;  

        }                                       
   }

The question is rather unclear; when you say "this is the API body", I presume this JSON fragment is what the REST API at https://url-of-the-endpoint expects. If so, you are building your request body wrong. http_build_query creates an URL-encoded form data block (like key=value&anotherKey=another_value ), not a JSON. For a JSON, here's what you want:

$data = array('students' => array
(
    array('admissionNumber' => $admNo, 'class' => $class)
),
'appDomain':$this->appDomain
);
$url_string = $data = json_encode($data);

Also, you probably want to remove the HTTP headers from the response:

curl_setopt($curlHandle, CURLOPT_HEADER, false);

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