Curl и PHP – как я могу передать json через curl с помощью PUT, POST, GET

Я работал над созданием API-интерфейса Rest для этого черта, и я тестировал его, когда я продвигаюсь, используя завиток из командной строки, что очень просто для CRUD

Я могу успешно выполнить этот вызов из командной строки

curl -u username:pass -X GET http://api.mysite.com/pet/1 curl -d '{"dog":"tall"}' -u username:pass -X GET http://api.mysite.com/pet curl -d '{"dog":"short"}' -u username:pass -X POST http://api.mysite.com/pet curl -d '{"dog":"tall"}' -u username:pass -X PUT http://api.mysite.com/pet/1 

Вышеупомянутые вызовы легко сделать из командной строки и отлично работать с моим api, но теперь я хочу использовать PHP для создания завитка. Как вы можете видеть, я передаю данные как строку json. Я читал об этом, и я думаю, что могу, возможно, сделать POST и включить поля POST, но мне не удалось выяснить, как передать данные HTTP-тел с помощью GET. Все, что я вижу, говорит, что вы должны привязать его к URL-адресу, но в форме командной строки это не выглядит так. В любом случае, мне бы это понравилось, если бы кто-то мог написать правильный способ сделать эти четыре операции в PHP здесь на одной странице. Я хотел бы увидеть самый простой способ сделать это с curl и php. Я думаю, мне нужно передать все через тело http, потому что мой php api ловит все с помощью php: // input

ПОЛОЖИЛ

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

ПОСЛЕ

 $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 См. @Dan H ответ

УДАЛИТЬ

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

Вы можете использовать эту небольшую библиотеку: https://github.com/jmoraleda/php-rest-curl

Выполнение вызова так же просто, как:

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

А для переменной $ result:

  • $ result ['status'] – это код ответа HTTP
  • $ result ['data'] массив с обработанным ответом JSON
  • $ result ['header'] строка с заголовками ответов

Надеюсь, поможет

Для себя я просто кодирую его в URL-адресе и использую $ _GET на целевой странице. Вот пример строки.

 $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: добавление фрагмента назначения … (EDIT 2 добавлено выше выше при запросе OP)

 <?php if(!isset($_GET['json'])) die("FAILURE"); $json = json_decode($_GET['json']); $method = $json->method; ... ?> 

установить еще одно свойство curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);