Wie stimme ich cURL Anfrage an eine Anfrage mit Postman

8

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:

%Vor%

Folgendes ist die PHP-Funktion, die ich auszulösen versuche:

%Vor%

Bitte helfen Sie mir, diese Fehler zu korrigieren.

    
Fshamri 15.02.2015, 18:13
quelle

2 Antworten

22

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:

%Vor%

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.

    
Spooky 15.02.2015, 18:34
quelle
1

Curl verwendet standardmäßig die HTTP-Standardauthentifizierung. Ihre Header in Postman sind etwas anderes. Versuchen Sie, Basic Auth in Postman zu verwenden. Es ist in der oberen Leiste, Sie geben Benutzername und Passwort und Authorization Header wird generiert.

    
js_ 15.02.2015 18:32
quelle

Tags und Links