我正在运行一个包含以下代码的PHP服务器。
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
if (isset($_POST["username"]) && isset($_POST["password"])) {
echo $_POST["username"];
http_response_code(200);
}
}
?>
如果发布请求中同时设置了用户名和密码,我期望脚本返回用户名。 但是,脚本不返回任何内容。使用Postman进行调试时,我发现第一个if语句通过了-我正在发送发布请求,但是 $ _ POST数组为空。我发现不是$ _POST数组,而是$ _REQUEST数组,特别是 $ _ GET数组包含我的参数。
服务器REQUEST_METHOD设置为POST,但是$ _GET数组包含我的参数。
因此此代码有效:
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
if (isset($_GET["username"]) && isset($_GET["password"])) {
echo $_GET["username"];
http_response_code(200);
}
}
?>
有人知道为什么会这样吗?我前段时间已经用php编程,也许我缺少明显的东西。
答案 0 :(得分:3)
$_POST
和$_GET
超全局变量不是以HTTP方法命名的(至少不是直接命名)。
它们以HTML表单method
属性值的名称命名,并关心数据在请求中的位置。
$_GET
由URL的查询字符串中的数据填充$_POST
由请求正文中的application / x-www-form-urlencoded和multipart / form-data编码的数据填充您必须发出POST请求,但要将数据放入URL的查询字符串中。 (请注意,查询字符串中的数据通常以纯文本格式记录在标准的Web服务器日志中,因此放置密码的确实位置很糟糕)
使用 Body 标签而不是 Params 标签输入数据。确保选择 form-data 或 x-www-form-urlencoded 。