webentwicklung-frage-antwort-db.com.de

Setzen Sie den Antwortstatuscode

Ich habe einen API-Aufruf, für den ich einige Überprüfungen ausführen und möglicherweise verschiedene Statuscodes zurückgeben muss. Ich brauche keine benutzerdefinierten Ansichten oder irgendetwas, ich muss nur den richtigen Code zurückgeben. Wenn der Benutzer keine korrekten Anmeldeinformationen übergeben hat, muss ich einen 401-Status zurückgeben. Wenn sie kein unterstütztes Anforderungsformat gesendet haben, muss ich den Status 400 zurückgeben.

Da es sich um eine API handelt, möchte ich wirklich nur den Antwortstatus festlegen und mit einer einfachen, dummen Meldung darüber schließen, warum die Anforderung fehlgeschlagen ist (wahrscheinlich mit einer exit). Gerade genug, um die Arbeit zu erledigen, aber ich konnte nicht, dass dies richtig funktioniert. Ich habe versucht, PHP's header() und Cake's $this->header() (dies ist alles im Controller) zu verwenden, aber obwohl ich die Exit-Nachricht bekomme, zeigt der Header einen 200 OK-Status.

Mit dem folgenden Code erhalte ich die Nachricht, aber der Header ist nicht festgelegt. Was vermisse ich?

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

PHP <= 5.3

Die Funktion header() hat einen Parameter für den Statuscode. Wenn Sie es angeben, kümmert sich der Server von dort aus.

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

PHP> = 5,4

Siehe die Antwort von Gajus: https://stackoverflow.com/a/14223222/362536

124
Brad

Seit PHP 5.4 können Sie http_response_code verwenden.

http_response_code(404);

Dadurch werden die richtigen HTTP-Header festgelegt.

Wenn Sie PHP <5.4 ausführen, haben Sie zwei Möglichkeiten:

  1. Aktualisierung.
  2. Verwenden Sie diese http_response_code-Funktion , die in PHP implementiert ist.
109
Gajus

Warum nicht Cakes Response Class verwenden? Sie können den Statuscode der Antwort einfach folgendermaßen einstellen:

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

Dann rendern Sie einfach eine Datei mit der Fehlermeldung, die am besten zu JSON passt.

11
nahri

Ich glaube nicht, dass Sie den Header richtig setzen. Versuchen Sie folgendes:

header('HTTP/1.0 401 Unauthorized');
11
Wesley Murch

Ich hatte das gleiche Problem mit CakePHP 2.0.1

Ich habe es versucht

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

und

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

Keines dieser Probleme löste jedoch mein Problem.

Ich löste es schließlich mit

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

Danach keine Fehler oder Warnungen von PHP/CakePHP.

* edit: Beim letzten Aufruf von $this->header füge ich einen Doppelpunkt (:) zwischen den 400 und den Beschreibungstext des Fehlers ein.

4
Michael Temple

Wie zuvor geschrieben, aber für Anfänger wie ich nicht vergessen, die Rückkehr mit einzubeziehen.

$this->response->statusCode(200);
return $this->response;
0
coder