设置回复状态码

我有一个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:

  1. 升级。
  2. 使用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;