Question

Je suis peut-être bien éloigné de la base, mais j'ai essayé tout l'après-midi de lancer la curl post command dans ce tutoriel sur le framework PHP. Ce que je ne comprends pas, c'est comment PHP est supposé interpréter mon POST, il apparaît toujours comme un tableau vide.

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

(La barre oblique ici est juste pour que je ne ressemble pas à un idiot, mais je l'ai exécuté depuis Windows en utilisant PHP 5.2, également essayé sur un serveur Linux, même version avec Linux curl)

Il doit y avoir quelque chose qui me manque parce que cela semble assez simple, le message ne doit tout simplement pas être interprété correctement. Si tel était le cas, tout fonctionnerait très bien.

C’est ce que je récupère:

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}}
Était-ce utile?

La solution

L'analyse de Jordans expliquant pourquoi le tableau $ _POST n'est pas rempli est correcte. Cependant, vous pouvez utiliser

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

pour récupérer le corps http et le manipuler vous-même. Consultez les flux d'entrée / de sortie PHP .

Du point de vue du protocole, cela est en fait plus correct, car vous ne traitez pas vraiment de données de formulaire multipart http. Utilisez également application / json en tant que type de contenu lorsque vous publiez votre demande.

Autres conseils

Normalement, le paramètre -d est interprété comme codé en forme. Vous avez besoin du paramètre -H :

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

Je pense que vous obtenez un tableau vide, car PHP s'attend à ce que les données publiées soient au format Querystring (clé = valeur & clé1 = valeur1).

Essayez de changer votre demande de curl en:

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

et voyez si cela vous aide.

Vous devez définir quelques indicateurs supplémentaires pour que curl envoie les données au format JSON.

commande

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

drapeaux

  • -H : en-tête personnalisé, le prochain argument devrait être en-tête
  • -X : verbe HTTP personnalisé, le prochain argument devrait être verbe
  • -d : envoie le prochain argument sous forme de données dans une requête HTTP POST

ressources

Vous devriez échapper aux guillemets comme ceci:

curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}'  \
  http://localhost:3570/index.php/trainingServer/screencast.json
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top