Ich verwende die folgende cURL-Anfrage an localhost, die gut läuft:
%Vor%Aber wenn ich dieselbe Anfrage mit Postman anstelle von cURL sende, bekomme ich:
%Vor% In Postman habe ich eine GET
Anfrage verwendet und folgendes als Header gesendet:
Folgendes ist die PHP-Funktion, die ich auszulösen versuche:
%Vor%Bitte helfen Sie mir, diese Fehler zu korrigieren.
Bei Verwendung von cURL wird die Option -u
(oder --user
) verwendet Geben Sie die Anmeldeinformationen für die HTTP-Standardauthentifizierung ein. Dies setzt den Header Authorization
so, dass er die erforderlichen Daten enthält, um sich mit dem Server zu authentifizieren.
Diese Schritte gelten für Postmans verpackte App . Schritte zur Legacy-App finden Sie diese der Überarbeitung dieser Antwort.
Um die HTTP-Standardauthentifizierung wie in Ihrem cURL-Befehl zu verwenden, klicken Sie auf die Registerkarte Autorisierung und geben Sie Ihre Anmeldeinformationen ein. Wenn Sie auf Update Request klicken, wird der erforderliche Header Authorization
für Sie hinzugefügt.
Um die JSON-Daten auf die gleiche Weise wie mit cURL zu übergeben, verwenden Sie eine POST
-Anforderung, wählen Sie roh auf der Registerkarte Body und geben Sie Ihre Daten ein so:
Um dies zu debuggen, habe ich Fiddler verwendet - einen kostenlosen Web-Debugging-Proxy.
Ich habe die Option --proxy
von cURL verwendet, um sie so über Fiddler zu senden:
Jetzt, da die Anfrage durch Fiddler geht, kann ich sie aus der Sitzungsliste auswählen und den "rohen" Inspektor benutzen, um die rohe Anfrage zu sehen:
Dies zeigt mir, dass die cURL eine POST
-Anforderung mit HTTP-Standardauthentifizierung und application/x-www-form-urlencoded
Inhalt erstellt. Diese Art von Daten besteht normalerweise aus Schlüsseln und Werten, z. B. foo=bar&hoge=fuga
. Diese cURL-Anfrage sendet jedoch einen Schlüssel ohne Wert. Ein Aufruf von var_dump($_POST)
führt zu folgendem Ergebnis:
Mit =
am Ende der Daten (so: {"jsonrpc": "2.0", "method": "feed.list", "id": 1}=
) ergibt var_dump
Folgendes:
Es scheint jedoch, dass JsonRPC in Ihrem Fall file_get_contents('php://input')
verwendet. Dies gibt die Daten zurück, die mit der Anfrage gesendet wurden, einschließlich eines =
, wenn die Daten damit enden. Da es versucht, die Eingabedaten als JSON-Zeichenfolge zu analysieren, schlägt es fehl, wenn die Zeichenfolge mit =
endet, da dies JSON ungültig wäre.
Mit der FoxyProxy Erweiterung für Chrome habe ich eine Proxy-Konfiguration für Fiddler ( 127.0.0.1:8888
), was mir erlaubt, die Daten, die von Postmans POST
Anfrage gesendet werden, leicht zu debuggen. Unter Verwendung von x-www-form-urlencoded
mit einem Schlüssel von foo
ohne Wert waren die gesendeten Daten tatsächlich foo=
, was dazu führen würde, dass Ihre JSON-Zeichenfolge ungültig ist.
Wenn Sie jedoch "rohe" Eingabe verwenden, können die angegebenen Daten gesendet werden, ohne dass ein =
am Ende hinzugefügt wird. Dadurch wird sichergestellt, dass die Daten gültige JSON-Daten sind.