API request through Curl / PHP

I look at the Parse.com REST API and make calls using the PHP Curl shell.

Raw Curl code (works):

curl -X GET \ -H "X-Parse-Application-Id: myApplicationID" \ -H "X-Parse-REST-API-Key: myRestAPIKey" \ https://api.parse.com/1/classes/Steps 

PhP code (works):

 $ch = curl_init('https://api.parse.com/1/classes/Steps'); curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-Parse-Application-Id: myApplicationID', 'X-Parse-REST-API-Key: myRestAPIKey', 'Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); curl_close($ch); 

This is good and dandy, but now when I try to add a query restriction:

Raw Curl code (works):

 curl -X GET \ -H "X-Parse-Application-Id: myApplicationID" \ -H "X-Parse-REST-API-Key: myRestAPIKey" \ -G \ --data-urlencode 'where={"steps":9243}' \ https://api.parse.com/1/classes/Steps 

Alas, we eventually came to my question. What is the php counterpart of the above code?

PHP code (doesn't work):

 $ch = curl_init('https://api.parse.com/1/classes/Steps'); $query = urlencode('where={"steps":9243}'); curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-Parse-Application-Id: myApplicationID', 'X-Parse-REST-API-Key: myRestAPIKey', 'Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $query); curl_exec($ch); curl_close($ch); 

Error response:

 Object ( [code] => 107 [error] => invalid json: where%3D%7B%22steps%22%3A9243%7D ) 
+8
api php curl
source share
4 answers

Your last PHP example changed the POST request from GET. Pass your parameters in the query string instead of the POST body. Try:

 $query = urlencode('where={"steps":9243}'); $ch = curl_init('https://api.parse.com/1/classes/Steps?'.$query); curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'X-Parse-Application-Id: myApplicationID', 'X-Parse-REST-API-Key: myRestAPIKey', 'Content-Type: application/json' ) ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); curl_close($ch); 
+12
source share

This line:

 curl_setopt($ch, CURLOPT_POSTFIELDS, $query); 

tries to set the request body, which is not valid for a GET request. cURL seems to allow you to set the body on a GET request ( example ).

It looks like your PHP is not making a POST request (at least I can tell by looking at other PHP examples that use curl_setopt($ch,CURLOPT_POST, count($fields)); I believe you need to pass the array to postfields:

 $fields = array( 'where' => urlencode('{"steps":9243}') ); curl_setopt($ch, CURLOPT_POST, count($fields)); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
0
source share

Try the following:

 $query = json_encode( array( 'where' => array( 'steps' => 9243 ) ) ); 

I got it from here - not tested! The Python example seems to be JSON encoding the request before sending it, so it might be worth a try.

0
source share

To call GET, POST, DELETE, PUT. All kind of request, I created one general function

 define("SITEURL", "http://localhost:82/slimdemo/RESTAPI"); function CallAPI($method, $api, $data, $headers) { $url = SITEURL . "/" . $api; $curl = curl_init($url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); switch ($method) { case "GET": curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); break; case "POST": curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); break; case "PUT": curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); break; case "DELETE": curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); break; } $response = curl_exec($curl); $data = json_decode($response); /* Check for 404 (file not found). */ $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); // Check the HTTP Status code switch ($httpCode) { case 200: $error_status = "200: Success"; return ($data); break; case 404: $error_status = "404: API Not found"; break; case 500: $error_status = "500: servers replied with an error."; break; case 502: $error_status = "502: servers may be down or being upgraded. Hopefully they'll be OK soon!"; break; case 503: $error_status = "503: service unavailable. Hopefully they'll be OK soon!"; break; default: $error_status = "Undocumented error: " . $httpCode . " : " . curl_error($curl); break; } curl_close($curl); echo $error_status; die; } 

CALL DeleteAPI

 $data = array('id'=>$_GET['did']); $header = array('USERTOKEN:' . GenerateToken()); $result = CallAPI('DELETE', "DeleteCategory", $data, $header); 

CALL PostAPI

 $data = array('title'=>$_POST['txtcategory'],'description'=>$_POST['txtdesc']); $header = array('USERTOKEN:' . GenerateToken()); $result = CallAPI('POST', "InsertCategory", $data, $header); 

CALL GetAPI

 $data = array('id'=>$_GET['eid']); $header = array('USERTOKEN:' . GenerateToken()); $result = CallAPI('GET', "GetCategoryById", $data, $header); 

CALL PutAPI

 $data = array('id'=>$_REQUEST['eid'],m'title'=>$_REQUEST['txtcategory'],'description'=>$_REQUEST['txtdesc']); $header = array('USERTOKEN:' . GenerateToken()); $result = CallAPI('POST', "UpdateCategory", $data, $header); 
0
source share

All Articles