SLIM PHP api 400 错误 - $_REQUEST 不工作
SLIM PHP api 400 error - $_REQUEST not working
我开始学习如何正确使用 REST API 遵循流行的教程 here
在尝试创建一个简单的 POST api 时,我将 运行 保持在 400 错误中,到目前为止我还没有在网上找到任何答案。
API如下:
$app->post('/test', function() use ($app) {
// check for required params
verifyRequiredParams(array('email'));
echo "Success";
});
尝试使用此代码块验证 'email' 参数,与教程相同:
function verifyRequiredParams($required_fields) {
$error = false;
$error_fields = "";
$request_params = array();
$request_params = $_REQUEST;
// Handling PUT request params
if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
$app = \Slim\Slim::getInstance();
parse_str($app->request()->getBody(), $request_params);
}
foreach ($required_fields as $field) {
if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
$error = true;
$error_fields .= $field . ', ';
}
}
if ($error) {
// Required field(s) are missing or empty
// echo error json and stop the app
$response = array();
$app = \Slim\Slim::getInstance();
$response["error"] = true;
$response["message"] = 'Required field(s) ' . substr($error_fields, 0, -2) . ' is missing or empty';
echoRespnse(400, $response);
$app->stop();
}
}
代码总是失败并显示 400 错误代码,因为 $_REQUEST 函数似乎返回一个空数组。任何想法可能出了什么问题?我正在 ubuntu 服务器 运行 apache 上开发。
Slim API 框架设置正确,因为我可以通过 Google 的 Advanced Rest Client 调用一个非常简单的调用,它会正确回显响应。而且我肯定将正确的参数传递给 api.
更新:我还尝试了 运行 直接从 api 中获取 $_REQUEST 和 $_GET 函数,它只是 returns 一个像这样的空字符串:
Array
(
)
我想知道是否有某种 apache 配置文件阻止了这些函数或其他东西的数据?
可能的问题:
您是否仔细检查过您在请求 headers 中选择的 Content-Type 是否正确?
我怀疑客户端正在感知从服务器端发送的格式错误的标记语言。
可能的解决方案:
将 Content-Type: application/x-www-form-urlencoded 更改为 application/JSON,反之亦然。
求教程领取
$name = $app->request->post('name');
POST 参数必须在有效负载数据中
name=你的名字&password=pass&email=me@mail.com
application/x-www-form-urlencoded
如果您在 URL 之后提供参数但不在有效负载数据中,则为 GET 请求。在这种情况下,本教程部分有效(它看到参数以验证所需参数是否存在)但它正在寻找参数 "anywhere",而它应该只在 POST 的有效负载参数中寻找。
我开始学习如何正确使用 REST API 遵循流行的教程 here
在尝试创建一个简单的 POST api 时,我将 运行 保持在 400 错误中,到目前为止我还没有在网上找到任何答案。
API如下:
$app->post('/test', function() use ($app) {
// check for required params
verifyRequiredParams(array('email'));
echo "Success";
});
尝试使用此代码块验证 'email' 参数,与教程相同:
function verifyRequiredParams($required_fields) {
$error = false;
$error_fields = "";
$request_params = array();
$request_params = $_REQUEST;
// Handling PUT request params
if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
$app = \Slim\Slim::getInstance();
parse_str($app->request()->getBody(), $request_params);
}
foreach ($required_fields as $field) {
if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
$error = true;
$error_fields .= $field . ', ';
}
}
if ($error) {
// Required field(s) are missing or empty
// echo error json and stop the app
$response = array();
$app = \Slim\Slim::getInstance();
$response["error"] = true;
$response["message"] = 'Required field(s) ' . substr($error_fields, 0, -2) . ' is missing or empty';
echoRespnse(400, $response);
$app->stop();
}
}
代码总是失败并显示 400 错误代码,因为 $_REQUEST 函数似乎返回一个空数组。任何想法可能出了什么问题?我正在 ubuntu 服务器 运行 apache 上开发。
Slim API 框架设置正确,因为我可以通过 Google 的 Advanced Rest Client 调用一个非常简单的调用,它会正确回显响应。而且我肯定将正确的参数传递给 api.
更新:我还尝试了 运行 直接从 api 中获取 $_REQUEST 和 $_GET 函数,它只是 returns 一个像这样的空字符串:
Array
(
)
我想知道是否有某种 apache 配置文件阻止了这些函数或其他东西的数据?
可能的问题: 您是否仔细检查过您在请求 headers 中选择的 Content-Type 是否正确? 我怀疑客户端正在感知从服务器端发送的格式错误的标记语言。
可能的解决方案: 将 Content-Type: application/x-www-form-urlencoded 更改为 application/JSON,反之亦然。
求教程领取 $name = $app->request->post('name');
POST 参数必须在有效负载数据中 name=你的名字&password=pass&email=me@mail.com application/x-www-form-urlencoded
如果您在 URL 之后提供参数但不在有效负载数据中,则为 GET 请求。在这种情况下,本教程部分有效(它看到参数以验证所需参数是否存在)但它正在寻找参数 "anywhere",而它应该只在 POST 的有效负载参数中寻找。