Je suis peut-être bien éloigné de la base, mais j'ai essayé tout l'après-midi de courir la commande curl post dans cet évidement 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
(Le slash dedans 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 n’est tout simplement pas interprété correctement. Si c’était le cas, tout fonctionnerait très bien.
Voici ce que je récupère:
HTTP/1.1 409 Conflit Date: vendredi, 1er mai 2009 22:03:00 GMT Serveur: 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, "sujet": null, "body": null, "dataUrl": null, "dataMedium": null, "createdOn": null, "author": null}}
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");
juste récupérer le corps http et le manipuler vous-même. Voir flux d'entrée/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.
Normalement, le paramètre -d
est interprété comme codé en forme. Vous avez besoin du -H
paramètre:
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 pour:
curl -i -X POST -d 'json={"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
et voir si cela aide tout.
Vous devez définir quelques indicateurs supplémentaires afin que curl envoie les données au format JSON.
$ curl -H "Content-Type: application/json" \
-X POST \
-d '{"JSON": "HERE"}' \
http://localhost:3000/api/url
-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 POSTVous devriez échapper aux citations comme ceci:
curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json