为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕的地6264312 2019-10-08 09:57:59
我一直在为它构建一个Rest API,并且一直在使用命令行中的curl对它进行测试,这对于CRUD非常容易我可以从命令行成功进行这些调用curl -u username:pass -X GET http://api.mysite.com/pet/1curl -d '{"dog":"tall"}' -u username:pass -X GET http://api.mysite.com/petcurl -d '{"dog":"short"}' -u username:pass -X POST http://api.mysite.com/petcurl -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捕捉了所有内容
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞


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


查看完整回答
反对 回复 2019-10-08
?
慕容708150

TA贡献1831条经验 获得超4个赞

对于我自己,我只是将其编码为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的要求下添加了更多内容)


<?php

if(!isset($_GET['json']))

    die("FAILURE");

$json = json_decode($_GET['json']);

$method = $json->method;

...

?>


查看完整回答
反对 回复 2019-10-08
  • 3 回答
  • 0 关注
  • 1617 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信