Je suis peut-être loin de la base, mais j'ai essayé tout l'après-midi d'exécuter la commande curl post dans ce tutoriel sur le framework PHP. Ce que je ne comprends pas, c'est comment PHP est censé 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 là-dedans sert juste à ne pas me faire ressembler à un idiot, mais j'ai exécuté cela à partir de 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 car 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 reçois:
Conflit HTTP / 1.1 409 Date: ven 01 mai 2009 22:03:00 GMT Serveur: Apache / 2.2.8 (Win32) PHP / 5.2.6 X-Powered-By: PHP / 5.2.6 Encodage de transfert: fragmenté Content-Type: texte / html; jeu de caractères = iso-8859-1 {"screencast": {"id": null, "subject": null, "body": null, "dataUrl": null, "dataMedium": null, "createdOn": null, "author": null}}
application/json
.Réponses:
L'analyse de Jordans sur la raison pour laquelle le tableau $ _POST n'est pas rempli est correcte. Cependant, vous pouvez utiliser
pour simplement récupérer le corps http et le gérer vous-même. Voir les flux d'entrée / sortie PHP .
Du point de vue du protocole, c'est en fait plus correct, puisque vous ne traitez pas vraiment de données de forme multipart http de toute façon. Utilisez également application / json comme type de contenu lors de la publication de votre demande.
la source
Normalement, le paramètre
-d
est interprété comme codé au format. Vous avez besoin du-H
paramètre:la source
Je crois que vous obtenez un tableau vide parce que 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:
et voyez si cela en aide.
la source
-H "Content-Type: application/json"
n'a pas fonctionné pour moi.Vous devez définir quelques indicateurs supplémentaires pour que curl envoie les données au format JSON.
commander
drapeaux
-H
: en-tête personnalisé, le prochain argument devrait être l'en-tête-X
: verbe HTTP personnalisé, le prochain argument devrait être le verbe-d
: envoie l'argument suivant sous forme de données dans une requête HTTP POSTRessources
la source
Vous devriez échapper aux guillemets comme ceci:
la source