curl和PHP – 如何通过PUT,POST,GET通过curl传递一个json

我一直在为它构build一个Rest API,我一直在testing它,通过在命令行中使用curl来进行testing,这对于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来创buildcurl。 正如你所看到的,我将数据作为jsonstring传递。 我已经阅读了周围,我想我可以做POST和包含POST字段,但我一直无法find如何传递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); 

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请参阅@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); 

对于$ resultvariables:

  • $ result ['status']是HTTP响应代码
  • $ result ['data']parsing了JSON响应的数组
  • $ result ['header']一个带响应头的string

希望能帮助到你

对于我自己,我只是在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); 

编辑:添加目标片段…(编辑2更多的OPs请求上面添加)

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

设置一个更多的属性curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,false);