Rob*_*son 91 php cakephp http-status-codes cakephp-1.3
我有一个API调用,我需要能够运行一些检查并可能返回各种状态代码.我不需要自定义视图或任何东西,我只需要返回正确的代码.如果用户未通过正确的凭据,我需要返回401状态.如果他们没有发送支持的请求格式,我需要返回400状态.
因为它是一个API,所以我真正想做的就是设置响应状态并退出一条简单的愚蠢消息,说明请求失败的原因(可能使用了a exit
).足以完成工作,但我无法使其正常工作.我已经尝试过使用PHP header()
和Cake $this->header()
(这都在控制器中),但是虽然我收到了退出消息,但是标题显示了200 OK
状态.
使用下面的代码,我收到消息,但未设置标头.我错过了什么?
if( !$this->auth_api() ) {
header( '401 Not Authorized' );
exit( 'Not authorized' );
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*rad 131
该header()
函数有一个状态代码参数.如果您指定它,服务器将从那里处理它.
header('HTTP/1.1 401 Unauthorized', true, 401);
Run Code Online (Sandbox Code Playgroud)
请参阅Gajus的回答:https://stackoverflow.com/a/14223222/362536
Gaj*_*jus 116
从PHP 5.4开始,您可以使用http_response_code.
http_response_code(404);
Run Code Online (Sandbox Code Playgroud)
这将负责设置正确的HTTP标头.
如果您运行PHP <5.4,那么您有两个选择:
http_response_code
功能.Wes*_*rch 12
我不认为你正确设置标题,试试这个:
header('HTTP/1.0 401 Unauthorized');
Run Code Online (Sandbox Code Playgroud)
nah*_*hri 11
为什么不使用Cakes Response Class? 您可以通过以下方式设置响应的状态代码:
$this->response->statusCode(200);
Run Code Online (Sandbox Code Playgroud)
然后只需使用错误消息呈现一个文件,该文件最适合JSON.
小智 5
我对 CakePHP 2.0.1 也有同样的问题
我尝试使用
header( 'HTTP/1.1 400 BAD REQUEST' );
Run Code Online (Sandbox Code Playgroud)
和
$this->header( 'HTTP/1.1 400 BAD REQUEST' );
Run Code Online (Sandbox Code Playgroud)
然而,这些都没有解决我的问题。
我最终确实通过使用解决了这个问题
$this->header( 'HTTP/1.1 400: BAD REQUEST' );
Run Code Online (Sandbox Code Playgroud)
之后,php / CakePHP 不再出现错误或警告。
*编辑:在最后一个$this->header
函数调用中,我:
在 400 和错误的描述文本之间放置了一个冒号 ( )。