1

以下是我正在使用的代码。

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

$app = new \Slim\App;

function handle_response($output, $response){
    if($output['status'] === "failed"){
        $response = $response->withStatus(400);
        $response->getBody()->write(json_encode($output));
    }
    else{
        $response->getBody()->write(json_encode($output));
    }
    return $response;

}

/* user profile */
$app->get('/user/profile', function (Request $request, Response $response) {
$headers = $request->getHeaders();
foreach ($headers as $name => $values) {
$name . ": " . implode(", ", $values);
}
    if ($request->hasHeader('Authorization')) {
    $output['token'] = 'yes';
}
    else
        $output['token'] = $name;

        $output['status'] = "success";    
        return handle_response($output, $response);
});

我在谷歌浏览器中使用邮递员来测试这个 REST 服务。我将自定义标头“授权”与 GET 请求一起传递。但是,该程序无法识别任何自定义标头。

代码块

$headers = $request->getHeaders();
foreach ($headers as $name => $values) {
     $name . ": " . implode(", ", $values);
}

仅返回标头“HTTP_ACCEPT_LANGUAGE”。

请帮我弄清楚,这里出了什么问题。

4

1 回答 1

3

它不是 Slim,它被认为是 PHP 特性。如果您发送的不是有效的 HTTP 基本授权标头,PHP 将无权访问它。您可以通过将以下重写规则添加到.htaccess文件来解决此问题。

RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

另一种方法是使用apache_request_headers(),但它是 Apache 特定的,不可移植。

于 2016-04-29T12:42:13.333 回答