gpt4 book ai didi

php - 在 PUT、PATCH、DELETE ... 请求中使用 php 读取 multipart/form-data 的原始请求正文

转载 作者:可可西里 更新时间:2023-10-31 22:10:02 24 4
gpt4 key购买 nike

我正在从头开始编写一个 restful api 库,现在我遇到了一个常见问题:从请求中读取来自 multipart/form-data 的原始数据。

对于 POST 请求,我知道我应该使用 $_FILE/$_POST 变量。但是,如果存在 PUTPATCH 或除 POST 之外的任何请求类型怎么办?

  • 这种情况可能吗?
  • 如果是这样,我如何阅读原始 body 内容,因为,根据 documentation它不是在 php://input 中可用吗?

注意:我已经搜索了输入格式以及如何读取它,我只想访问 RAW 数据

最佳答案

But what if there is a PUT, PATCH, or whatever request type, other than POST?

好吧,既然您是设计 API 的人,那么您就是决定它是否只接受POST 的人,PUTPOST + PUT 或任何其他请求 header 的组合。

API 不应设计为“接受并尝试处理”第三方应用提交给您的 API 的所有内容。以 API 接受请求的方式准备请求是应用程序(我的意思是连接到 API 的应用程序)的工作。

请记住,启用多种请求方法(尤其是那些必须以不同方式对待的方法)会带来多种处理请求的方法(例如安全、类型等)。这基本上意味着要么您必须巧妙地设计一个请求处理过程,要么您将遇到以不同请求类型调用不同 API 方法的问题,这将很麻烦。

如果您需要获取请求的原始内容 - @Adil Abbasi 似乎走在正确的轨道上(就解析 php://input 而言)。 但请注意 php://input 不适用于 enctype="multipart/form-data" as described in the docs .

<?php
$input = file_get_contents('php://input');
// assuming it's JSON you allow - convert json to array of params
$requestParams = json_decode($input, true);
if ($requestParams === FALSE) {
// not proper JSON received - set response headers properly
header("HTTP/1.1 400 Bad Request");
// respond with error
die("Bad Request");
}

// proceed with API call - JSON parsed correctly

如果您需要使用 enctype="multipart/form-data" - 请阅读 I/O Streams docs 中的 STDIN,然后像这样尝试:

<?php
$bytesToRead = 4096000;
$input = fread(STDIN, $bytesToRead ); // reads 4096K bytes from STDIN
if ($input === FALSE) {
// handle "failed to read STDIN"
}
// assuming it's json you accept:
$requestParams = json_decode($input , true);
if ($requestParams === FALSE) {
// not proper JSON received - set response headers properly
header("HTTP/1.1 400 Bad Request");
// respond with error
die("Bad Request");
}

关于php - 在 PUT、PATCH、DELETE ... 请求中使用 php 读取 multipart/form-data 的原始请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38082300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com