设置回复状态码
我有一个API调用,我需要能够运行一些检查,并可能返回各种状态代码。 我不需要自定义视图或任何东西,我只需要返回正确的代码。 如果用户没有通过适当的凭据,我需要返回401状态。 如果他们还没有发送支持的请求格式,我需要返回400状态。
因为这是一个API,我真正想要做的就是设置响应状态并退出一个简单,愚蠢的消息,说明为什么请求失败(可能使用exit
)。 刚好足够完成工作,但我一直没有能够得到这个工作的权利。 我试过使用PHP的header()
和Cake的$this->header()
(这全部在控制器中),但是虽然我得到了退出消息,但是头部显示了200 OK
状态。
使用下面的代码,我得到的消息,但头没有设置。 我错过了什么?
if( !$this->auth_api() ) { header( '401 Not Authorized' ); exit( 'Not authorized' ); }
PHP <= 5.3
header()
函数有一个状态码的参数。 如果您指定它,服务器将从那里处理它。
header('HTTP/1.1 401 Unauthorized', true, 401);
PHP> = 5.4
请参阅Gajus的答案: https ://stackoverflow.com/a/14223222/362536
从PHP 5.4开始,你可以使用http_response_code 。
http_response_code(404);
这将负责设置正确的HTTP头。
如果你正在运行PHP <5.4,那么你有两个select:
- 升级。
- 使用PHP中实现的这个
http_response_code
函数 。
我不认为你正确设置标题 ,试试这个:
header('HTTP/1.0 401 Unauthorized');
为什么不使用蛋糕响应类? 您可以简单地设置响应的状态码:
$this->response->statusCode(200);
然后,只需使用JSON最适合的错误消息来呈现文件。
我有与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没有错误或警告。
*编辑:在最后的$this->header
函数调用中,我把一个冒号(:)在400和错误的描述文本之间。
正如之前所写,但对于像我这样的初学者,不要忘记包括回报。
$this->response->statusCode(200); return $this->response;