Curl and PHP - how can I pass a json through curl by PUT,POST,GET
PUT
$data = array('username'=>'dog','password'=>'tall');$data_json = json_encode($data);$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data_json)));curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);curl_close($ch);
POST
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);curl_close($ch);
GET See @Dan H answer
DELETE
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);curl_close($ch);
You can use this small library: https://github.com/ledfusion/php-rest-curl
Making a call is as simple as:
// GET$result = RestCurl::get($URL, array('id' => 12345678));// POST$result = RestCurl::post($URL, array('name' => 'John'));// PUT$result = RestCurl::put($URL, array('$set' => array('lastName' => "Smith")));// DELETE$result = RestCurl::delete($URL);
And for the $result variable:
- $result['status'] is the HTTP response code
- $result['data'] an array with the JSON response parsed
- $result['header'] a string with the response headers
Hope it helps
For myself, I just encode it in the url and use $_GET on the destination page. Here's a line as an example.
$ch = curl_init();$this->json->p->method = "whatever";curl_setopt($ch, CURLOPT_URL, "http://" . $_SERVER['SERVER_NAME'] . $this->json->path . '?json=' . urlencode(json_encode($this->json->p)));curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$output = curl_exec($ch);curl_close($ch);
EDIT: Adding the destination snippet... (EDIT 2 added more above at OPs request)
<?phpif(!isset($_GET['json'])) die("FAILURE");$json = json_decode($_GET['json']);$method = $json->method;...?>