我有一个API调用,我需要能够运行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过正确的凭据,我需要返回401状态。如果他们没有发送支持的请求格式,我需要返回400状态。
因为它是一个API,所以我真正想做的就是设置响应状态并退出一条简单的愚蠢消息,说明请求失败的原因(可能使用exit
)。足以完成工作,但我无法使其正常工作。我已经尝试过使用PHP的header()
和Cake的$this->header()
(这都在控制器中),但是虽然我收到退出消息,但标题显示200 OK
状态。
使用下面的代码,我收到消息,但未设置标头。我错过了什么?
if( !$this->auth_api() ) {
header( '401 Not Authorized' );
exit( 'Not authorized' );
}
答案 0 :(得分:128)
header()
函数有一个状态代码参数。如果您指定它,服务器将从那里处理它。
header('HTTP/1.1 401 Unauthorized', true, 401);
答案 1 :(得分:113)
自PHP 5.4起,您可以使用http_response_code。
http_response_code(404);
这将负责设置正确的HTTP标头。
如果您正在运行PHP< 5.4那么你有两个选择:
http_response_code
function。答案 2 :(得分:11)
我认为你没有正确设置header,试试这个:
header('HTTP/1.0 401 Unauthorized');
答案 3 :(得分:11)
为什么不使用Cakes Response Class? 您可以通过以下方式设置响应的状态代码:
$this->response->statusCode(200);
然后只使用错误消息呈现一个文件,该文件最适合JSON。
答案 4 :(得分:4)
我在CakePHP 2.0.1中遇到了同样的问题
我尝试使用
header( 'HTTP/1.1 400 BAD REQUEST' );
和
$this->header( 'HTTP/1.1 400 BAD REQUEST' );
然而,这些都没有解决我的问题。
我最终使用
解决了这个问题$this->header( 'HTTP/1.1 400: BAD REQUEST' );
之后,php / CakePHP没有错误或警告。
* edit:在上一次$this->header
函数调用中,我在400和错误的描述文本之间放了一个冒号(:
)。
答案 5 :(得分:0)
如前所述,但对于像我这样的初学者,请不要忘记包括回报。
$this->response->statusCode(200);
return $this->response;