如何在服务器端访问 PHP REST API PUT 数据?

2022-08-30 17:50:41

-- 问题 --

我刚刚开始使用REST API,并且非常困惑。

这就是我的PHP cRUL客户端对PUT的样子。

case 'PUT':
    curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
    break;

现在,当我查看服务器时,我的_SERVER美元['REQUEST_METHOD']显示PUT,但我的问题是我如何获得我发送CURLOPT_POSTFIELDS$data。

我需要做的就是将$data与PUT请求一起发送到下一行。喜欢

$value = $data['curl_data'];

我在这个话题上看到了很多混乱,这让我头疼。在php客户端看起来很容易,但是没有人有适用于php服务器端的答案。

感谢您的任何帮助!

- 回答(在帮助和家庭作业之后) -

我是新来的,所以我不能回答我自己的问题,直到8小时后...奇数:)

好吧,在与这里的伟人合作之后,我不得不说我们遇到了答案。我为自己太容易了而自责,同时又令人困惑。

curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));

第一个变化(上图)我必须在$data周围添加http_build_query()。这会将我的数据从数组转换为 url 友好字符串。

接下来,我必须补充一下。

parse_str(file_get_contents('php://input'), $put);

现在我可以做一些事情,比如$put['data']。

PaulPRO上面给出的答案确实可以像file_get_contents()那样使用更少的行来获取数据。我们被困在试图弄清楚如何解析数据,这就是我在另一个网站上看到的缺乏http_build_query()的地方。

这就是它的工作原理。

  1. 数据被放入普通数组中。
  2. http_build_query() 将其转换为一个漂亮的几乎像 GET 一样的字符串。
  3. file_get_contents() 将其从客户端传输到服务器。
  4. 然后parse_str()将其转换回数组。

我看到很多关于使用PUT发送文件的消息。我可以看到这将如何工作,但是从我在整个REST过程中读到的内容来看,PUT是更新数据,就像post是创建数据一样。也许我错了。我错过了什么吗?


答案 1

来自 PHP 手册

PUT 数据来自 stdin:

$putdatafp = fopen("php://input", "r");

用法示例:

$putfp = fopen('php://input', 'r');
$putdata = '';
while($data = fread($putfp, 1024))
    $putdata .= $data;
fclose($putfp);

答案 2

我有相同的场景,其中,必须使用PUT方法通过ReST API将数据发送到PHP服务器。我花了将近几个小时才找到解决方案,但最终找到了方法:

在 CUrl 中 :

$postData = http_build_query($data);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData); 

我们必须将数据解析为一个变量,比如说:$putData,这里,是解析字符串过程:

parse_str(file_get_contents("php://input"),$putData); 

然后打印 ,将获得您在 curl 中发布的相同数组。$putData


推荐