Frage

kann ich weg Basis sein, aber ich habe den ganzen Nachmittag versucht zu laufen die curl Befehl POST in diesem Rahmen PHP tutorial Vertiefung. Was ich nicht verstehe, ist, wie ist PHP soll meine POST interpretieren, ist es immer als ein leeres Array kommt.

curl -i -X POST -d '{"screencast":{"subject":"tools"}}'  \
      http://localhost:3570/index.php/trainingServer/screencast.json

(Der Schrägstrich in gibt es nur, um mich wie ein Idiot aussehen nicht, aber ich ausgeführt diese aus den Fenstern mit PHP 5.2, auch versucht, auf einem Linux-Server, gleiche Version mit Linux curl)

Es ist etwas sein muss ich vermisst habe, weil es ziemlich einfach scheint, ist die Post einfach nicht richtig interpretiert werden, wenn es war, würde alles super funktioniert.

Dies ist, was ich zurück:

HTTP/1.1 409 Conflict
Date: Fri, 01 May 2009 22:03:00 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

{"screencast":{"id":null,"subject":null,"body":null,
         "dataUrl":null,"dataMedium":null,"createdOn":null,"author":null}}
War es hilfreich?

Lösung

Jordans Analyse, warum die $ _POST-Array wird nicht aufgefüllt korrekt ist. Allerdings können Sie

$data = file_get_contents("php://input");

nur den http Körper abrufen und diese selbst behandeln. Siehe PHP Input / Output-Streams .

Aus einem Protokoll Perspektive ist dies tatsächlich mehr richtig, da Sie nicht wirklich verarbeiten http mehrteiliger Formulardaten sowieso. Verwenden Sie auch application / json als Content-Typ, wenn Ihre Anfrage veröffentlichen.

Andere Tipps

Normalerweise wird der Parameter -d als form codiert interpretiert. Sie müssen den -H Parameter:

curl -v -H "Content-Type: application/json" -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json

Ich glaube, Sie ein leeres Array bekommen, weil PHP die gebuchten Daten erwartet werden in einem Abfragezeichenformat (key = value & key1 = value1).

Versuchen Sie curl Anfrage Wechsel an:

curl -i -X POST -d 'json={"screencast":{"subject":"tools"}}'  \
      http://localhost:3570/index.php/trainingServer/screencast.json

und sehen, ob das hilft jeder.

Sie müssen ein paar zusätzlichen Flags setzen, so dass curl die Daten als JSON sendet.

Befehl

$ curl -H "Content-Type: application/json" \
       -X POST \
       -d '{"JSON": "HERE"}' \
       http://localhost:3000/api/url

Flags

  • -H: benutzerdefinierte Header, wird als nächstes Argument erwartet Header
  • sein
  • -X: benutzerdefinierte HTTP-Verb, wird als nächstes Argument erwartet Verb
  • sein
  • -d: sendet das nächste Argument als Daten in einer HTTP-POST-Anfrage

Ressourcen

Sie sollten die Angebote wie folgt entkommen:

curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}'  \
  http://localhost:3570/index.php/trainingServer/screencast.json
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top