Ich bin vielleicht weit von der Basis entfernt, aber ich habe den ganzen Nachmittag versucht, den Befehl curl post in diesem PHP-Framework-Tutorial für die Pause auszuführen . Was ich nicht verstehe ist, wie PHP meinen POST interpretieren soll, er erscheint immer als leeres Array.
curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
(Der Schrägstrich dort soll mich nur nicht wie einen Idioten aussehen lassen, aber ich habe dies unter Windows mit PHP 5.2 ausgeführt, das auch auf einem Linux-Server versucht wurde, dieselbe Version mit Linux Curl)
Es muss etwas geben, das mir fehlt, weil es ziemlich einfach zu sein scheint. Der Beitrag wird einfach nicht richtig interpretiert. Wenn es so wäre, würde alles großartig funktionieren.
Folgendes bekomme ich zurück:
HTTP / 1.1 409-Konflikt Datum: Fr, 01. Mai 2009 22:03:00 GMT Server: Apache / 2.2.8 (Win32) PHP / 5.2.6 X-Powered-By: PHP / 5.2.6 Übertragungscodierung: Chunked Inhaltstyp: text / html; Zeichensatz = iso-8859-1 {"screencast": {"id": null, "subject": null, "body": null, "dataUrl": null, "dataMedium": null, "createdOn": null, "author": null}}
application/json
.Antworten:
Jordans Analyse, warum das $ _POST-Array nicht gefüllt ist, ist korrekt. Sie können jedoch verwenden
um einfach den http-Körper abzurufen und selbst damit umzugehen. Siehe PHP-Eingabe- / Ausgabestreams .
Aus Protokollsicht ist dies tatsächlich korrekter, da Sie ohnehin nicht wirklich mehrteilige http-Formulardaten verarbeiten. Verwenden Sie außerdem application / json als Inhaltstyp, wenn Sie Ihre Anfrage veröffentlichen.
quelle
Normalerweise wird der Parameter
-d
als formularcodiert interpretiert. Sie benötigen den-H
Parameter:quelle
Ich glaube, Sie erhalten ein leeres Array, da PHP erwartet, dass die veröffentlichten Daten in einem Querystring-Format vorliegen (key = value & key1 = value1).
Versuchen Sie, Ihre Curl-Anfrage zu ändern:
und sehen, ob das hilft.
quelle
-H "Content-Type: application/json"
hat bei mir nicht funktioniert.Sie müssen einige zusätzliche Flags setzen, damit Curl die Daten als JSON sendet.
Befehl
Flaggen
-H
: Benutzerdefinierter Header, nächstes Argument wird voraussichtlich Header sein-X
: benutzerdefiniertes HTTP-Verb, nächstes Argument wird voraussichtlich Verb sein-d
: sendet das nächste Argument als Daten in einer HTTP-POST-AnforderungRessourcen
quelle
Sie sollten den Anführungszeichen wie folgt entkommen:
quelle