Curl和PHP-如何通过PUT,POST,GET通过curl传递json

我一直在为它构建一个Rest API,并且一直在使用命令行中的curl对它进行测试,这对于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创建curl。如您所见,我将数据作为json字符串传递。我已经阅读了很多,我想我可能可以进行POST并包含POST字段,但是我无法找出如何通过GET传递http正文数据。我看到的所有内容都说您必须将其附加到url,但在命令行表单上看起来却不是这样。无论如何,如果有人可以在一页上写出正确的方法来用PHP执行这四个操作,我会喜欢的。我想看看使用curl和php的最简单方法。我想我需要通过http正文传递所有内容,因为我的php api使用php:// input捕捉了所有内容


慕的地6264312
浏览 1618回答 3
3回答

慕娘9325324

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

慕容708150

对于我自己,我只是将其编码为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在OP的要求下添加了更多内容)<?phpif(!isset($_GET['json']))&nbsp; &nbsp; die("FAILURE");$json = json_decode($_GET['json']);$method = $json->method;...?>
打开App,查看更多内容
随时随地看视频慕课网APP