91 votes

Jeu De Code D'État De Réponse

J'ai un appel API pour laquelle j'ai besoin d'être en mesure d'exécuter des vérifications et peut-être retourner à divers codes d'état. Je n'ai pas besoin de vues personnalisées ou quoi que ce soit, j'ai juste besoin de retourner le bon code. Si l'utilisateur n'a pas transmis des informations d'identification correctes, j'ai besoin de retourner à un état 401. Si ils n'ont pas envoyé de prise en charge du format de la demande, j'ai besoin de revenir un 400 statut.

Parce que c'est une API, tout ce que je veux vraiment faire est de définir le statut de la réponse et de sortie avec un simple, stupide message sur les raisons de l'échec de la demande (probablement à l'aide d'un exit). Juste assez pour faire le travail, mais je n'ai pas été en mesure d'obtenir ce travail à droite. J'ai essayé à l'aide de PHP header() et de Cake $this->header() (c'est tout dans le contrôleur), mais bien que j'obtiens le message de sortie, l'en-tête montre un 200 OK statut.

À l'aide du code ci-dessous, je reçois le message, mais l'en-tête n'est pas définie. Ce qui me manque?

  if( !$this->auth_api() ) {
    header( '401 Not Authorized' );
    exit( 'Not authorized' );
  }

131voto

Brad Points 61171

L' header() est la fonction d'un paramètre pour le code d'état. Si vous spécifiez, le serveur va prendre soin d'elle à partir de là.

header('HTTP/1.1 401 Unauthorized', true, 401);

116voto

Gajus Kuizinas Points 4713

Depuis PHP 5.4, vous pouvez utiliser http_response_code.

http_response_code(404);

Cela va prendre soin de la définition de la bonne en-têtes HTTP.

Si vous utilisez PHP < 5.4 ensuite:

  1. La mise à niveau.
  2. Il y a un http_response_code fonction implémenté en PHP.

12voto

Wesley Murch Points 48959

Je ne pense pas que vous êtes le réglage de l' en-tête correctement, essayez ceci:

header('HTTP/1.0 401 Unauthorized');

11voto

nahri Points 361

Pourquoi ne pas utiliser des Gâteaux Classe de Réponse? Vous pouvez définir le code d'état de la réponse tout simplement par ceci:

$this->response->statusCode(200);

Ensuite, créez simplement un fichier avec le message d'erreur qui s'adapte le mieux avec JSON.

4voto

Michael Temple Points 31

J'ai eu le même problème avec CakePHP 2.0.1

J'ai essayé d'utiliser

header( 'HTTP/1.1 400 BAD REQUEST' );

et

$this->header( 'HTTP/1.1 400 BAD REQUEST' );

Cependant, aucune de ces résolu mon problème.

J'ai fini par résoudre le problème en utilisant

$this->header( 'HTTP/1.1 400: BAD REQUEST' );

Après ça, pas d'erreur ou d'avertissement de la part de php / CakePHP.

*edit: Dans le dernier $this->header appel de fonction, j'ai mis une virgule (:) entre le 400 et le texte de description de l'erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X