Das Senden von POST-Parametern mit Postman funktioniert nicht, das Senden von GET-Parametern jedoch

73

Ich versuche, eine einfache PHP-Seite mit der Chrome-Erweiterung Postman zu testen. Wenn ich URL-Parameter sende, funktioniert das Skript einwandfrei (z. B. sind die Variablen im $_REQUESTParameter verfügbar ). Wenn ich sie als x-www-form-urlencodedParameter sende , $_REQUESTenthält der Parameter nur die PHPSESSID.

Das Skript:

<?php
var_export($_REQUEST);
?>

Wenn ich URL-Parameter sende, $_REQUESTenthält diese: URL-Parameter

Wenn ich sie jedoch als POSTVariablen sende, werden sie $_REQUESTnicht berücksichtigt: Geben Sie hier die Bildbeschreibung ein

Was vermisse ich?

whiterook6
quelle
2
Haben Sie eine Antwort auf dieses Problem gefunden? Ich habe das gleiche Problem.
Stuart
Nein, habe ich noch nicht. Es könnte durchaus etwas mit unserem API-Routing zu tun haben, möglicherweise nur einige der Parameter zu senden, aber nicht alle? Ich bin mir nicht sicher.
whiterook6
Vielen Dank für die Antwort - ich habe es gerade leider aufgegeben ...: /
Stuart
Habe das gleiche Problem :(
Aldekein
2
Ich habe diese Antwort gefunden: stackoverflow.com/a/28461500/704803 . Ich habe von HTTP zu HTTPS umgeleitet und dadurch gingen die POST-Variablen verloren. Als ich Postman sagte, er solle direkt zur HTTPS-URL gehen, funktionierte es
andrewtweber

Antworten:

78

Ich habe die URL in Postman so eingestellt, dass sie lautet, http://aber Apache hat zu umgeleitet https://und irgendwie wurden die POST-Variablen auf dem Weg gelöscht.

Nachdem ich es geändert hatte https://, funktionierten die POST-Variablen ordnungsgemäß.

Siehe auch: https://stackoverflow.com/a/28461500/704803

andrewtweber
quelle
3
Dies war auch das Problem, das ich hatte. nginx leitete über 302 zu https um und die POST-Parameter wurden bei der Umleitung gelöscht. Manuelles Festlegen der URL auf https: // hat funktioniert.
Anothermh
Ich denke, das ist der Fehler in Postman. Arbeiten für HTTPS und nicht Arbeiten für HTTP. Ich habe dort Code gesehen, der durch ihre Funktionalität Generate Codegeneriert wurde und falschen Code für Python-Anfragen generiert hat. querystring = {"Benutzername": "data1", "mydata": "9232"} payload = "" headers = {'Cache-Kontrolle': "kein Cache", 'Postman-Token': "aeb70e40-c12a-f713 -1d8d-596b8cf976af "} response = request.request (" POST ", URL, Daten = Nutzdaten, Header = Header, Parameter = Querystring) print (response.text) Ich denke, das ist fehlerhaft.
Harte Vardhan Ladha
Ich erhalte den gleichen Fehler, aber diese Theorie trifft nicht zu. Es funktioniert nicht für beide.
Heemanshu Bhalla
Vielen Dank. Dieser hat mir Zeit gespart.
Rakibul Islam
90

Ich hatte beide Probleme mit PostMan und Advance REST Client. Ich habe Fiddler überprüft und festgestellt, dass meine Anforderungsnutzdaten nicht in das JSON-Format konvertiert wurden.

Ich übergebe meine Daten in Body als x-www-form-urlencoded Geben Sie hier die Bildbeschreibung ein

Sie können das Problem beheben, indem Sie Content-Type als application / x-www-form-urlencoded im Anforderungsheader verwenden. Geben Sie hier die Bildbeschreibung ein

Arvind Dhasmana
quelle
Vielen Dank @Arvind, das Ändern des Headers application/x-www-form-urlencodedfunktioniert tatsächlich! IMHO, dies sollte als Antwort akzeptiert werden :)
Rafal Gałka
2
Vielleicht steht jemand vor dem gleichen Problem: Für mich hat die Verwendung localhost/somethingvon POSTMAN nicht funktioniert, aber nach dem Hinzufügen /am Ende begann PHP, die Werte von POSTund von zu erhalten php://input. Ich musste es benutzen localhost/something/, damit es funktionierte.
FirstOne
4
Ja! Dies behebt das Problem. Tatsächlich setzt das PARAMSFeld in der Nähe URLdie GETDaten, nicht die POSTDaten. Und das Schlüsselwort PARAMSimmer verwendet wird, um GETund in DATABezug auf wird POSTfür die Weitergabe der Daten. Ich denke, Peeps bei PostMan sollten dies beheben, um automatisch zu ändern, oder die DATASchaltfläche automatisch hinzufügen .
Harte Vardhan Ladha
@FirstOne solltest du dabei als Antwort. Ich habe das gleiche Problem auch
ismailsunni
23

Verwenden Sie einfach die Body Tabund geben Sie die post parametersdort ein. Beachten Sie, dass dies Body Tabdeaktiviert ist, wenn Getausgewählt ist.

AndroidLearner
quelle
14

Überprüfen Sie Ihren Inhaltstyp in der Kopfzeile. Ich hatte ein Problem mit dem Senden von unformatiertem JSON und meinem Inhaltstyp als application / json im POSTMAN-Header.

Mein PHP sah Jack alle in der Anfrage Post. Erst als ich den Inhaltstyp in Anwendung / x-www-form-urlencoded mit dem JSON im RAW-Textbereich und seinem Typ als JSON änderte, begann meine PHP-App, die Post-Daten zu sehen. Nicht das, was ich erwartet hatte, als ich mich mit Raw JSON beschäftigte, aber es funktioniert jetzt für das, was ich brauche.

Postbote POST Anfrage

Mushcraft
quelle
1
Ja, das Ändern des Körpertyps in x-www-form-urlencoded hat es für mich behoben
Gerard
8

Wenn Sie Parameter senden , x-www-form-urlencodeddann müssen Sie Set - Header für die Anforderung wie die Verwendung Content-Typealsapplication/x-www-form-urlencoded

Satish Shinde
quelle
2
Für mich war es, die BodyRegisterkarte auszuwählen und auszuwählen, x-www-form-urlencodedund unter dieser Auswahl finden Sie einen Schlüssel- / Werteintrag, in den Sie Ihre POST-Schlüssel- / Wertdaten einfügen. Übrigens ist meine Postman-Version 4.10.4
Zamrony P. Juhara
4

Ich hatte das gleiche Problem. Um dies zu beheben, habe ich die folgenden Header hinzugefügt:

Content-Type: application/json

Ich musste den Inhaltstyp manuell hinzufügen, obwohl ich auch den Typ "json" in den Rohparametern des Postfelds hatte.

John O'Connor
quelle
2

Es tut uns leid, wenn dies Thread-Nekromantie ist, aber dies ist auch heute noch relevant, insbesondere bei der Anzahl der verwendeten APIs!

Ein Problem, das ich hatte, war: Ich wusste nicht, dass Sie in die Spalte " Schlüssel " Folgendes einfügen müssen: " Inhaltstyp "; Ich dachte, dies sei ein Benutzerschlüssel, als er in der Anfrage zurückkam, was er nicht ist.

So etwas Einfaches könnte Ihnen helfen. Ich denke, Postman könnte diese Spalte besser formulieren, da ich nicht einmal die Dokumentation lesen musste, wenn es um die Verwendung von Fiddler ging. während ich mit Postman tat.

Postbotenbild

Lee
quelle
1

Für mich erwartete der Server HTTPS-Anforderungen, aber das habe ich in der URL nicht angegeben. Der Haken würde den Server erreichen, aber der Körper wäre leer.

user2229618
quelle
1

raw JSON bodyVersuchen Sie es mit anstatt zu verwenden form-data.

Formulardatenanforderung

Choxmi
quelle
0

Manchmal Versionsproblem in 'Postman':

Ich habe das gleiche Problem. Beim Senden der Daten mit der ältesten Version des Postboten.
Dieses Mal habe ich die leeren JSON-Daten auf der Serverseite erhalten.
Und ich habe dieses Problem behoben, sobald ich die älteste Version von Postman deinstalliert und mit der neuesten Version installiert habe.

Mohammed Yasin
quelle