我需要向 PHP 应用程序发出 PATCH 请求。如何才能从该应用程序内的 PATCH 请求中获取数据?如果我必须使用 POST 来执行此操作,那么只需简单访问
我需要 PATCH 向 PHP 应用程序发出请求。
PATCH
该应用程序内的 PATCH 该请求中获取数据
如果我必须用 来做这件事 POST ,那只不过是对全局变量的简单访问 $_POST 。
POST
$_POST
使用 $_SERVER['REQUEST_METHOD'] 来获取请求类型。
流包装器 php://input 获取数据
php://input
$data = file_get_contents('php://input');
还要确保您的 Web 服务器支持 PATCH 请求,有些服务器配置为仅响应 GET 和 POST。
但是如何像 $_GET 或 $_POST 那样简单地使用这些数据……它返回了一些奇怪的字符串
@santosh 没那么简单。您还应该检查 Content-Type 请求标头并决定如何处理此字符串。它可以是 JSON、base64 编码文件或 urlencoded 查询字符串。
我知道这个问题已经解决了,但对于那些希望得到类似答案的人来说
$_PATCH["name"];
有一种方法可以做到这一点:
parse_str(file_get_contents('php://input'), $_PATCH);
然后你就可以像下面这样 $_GET["something"] 访问 $_POST["something"] 它
$_GET["something"]
$_POST["something"]
$_PATCH["something"]
希望对大家有帮助:)
等等,这不管用。我得到的键值类似 ------WebKitFormBoundaryDBQQ4THK5a0cbY20 Content-Disposition:_form-data;_name
甚至在 PHP 7.2.34 中也无法正常工作 ----------------------------541429037887217943792898 Content-Disposition:_form-data;_name] => \'key\'
我认为 parse_str() 无法解析 multipart/form-data。这就是您获得边界字符串的原因。
由于上述方法在 PHP 5.6 中都不起作用,因此这里有一个实际有效的解决方案。
我使用了 parse_raw_http_request($data) 函数 的 Christof .
代码如下:
$_PATCH = []; parse_str(file_get_contents('php://input'), $_PATCH); parse_raw_http_request($_PATCH); // From now on, the $_PATCH variable keeps all request arguments as well, // and they're accessible under approprate keys like $_PATCH['yourKey']
我在用着 : PHP 7.4
PHP 7.4
function patchMethod(){ parse_str(file_get_contents('php://input'), $_PATCH); $body=[]; if (is_array($_PATCH)) { foreach ($_PATCH as $key => $value) { $body[$key] = $value; } } return $body; }