108 votes

Comment faire pour poster JSON en PHP avec curl

J'ai peut-être hors de la base, mais j'ai essayé tout l'après-midi pour exécuter la boucle poste de commandement dans ce renfoncement framework PHP tutoriel. Ce que je ne comprends pas, c'est comment est que PHP est censé interpréter mon POST, il vient toujours comme un tableau vide.

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

(La barre oblique, c'est juste pour me faire de ne pas ressembler à un imbécile, mais j'ai exécuté ce à partir de windows à l'aide de PHP 5.2, également essayé sur un serveur Linux, même la version avec Linux curl)

Il doit y avoir quelque chose qui me manque, car il semble assez simple, le post n'est tout simplement pas être interprété droit, s'il l'était, tout devrait fonctionner à merveille.

C'est ce que j'obtiens en retour:

HTTP/1.1 409 Conflit
Date: Fri, 01 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,"subject":null,"carrosserie":null,
"dataUrl":null,"dataMedium":null,"createdOn":null,"auteur":null}}

120voto

Jim Carrig Points 1081

Normalement, le paramètre est interprété comme forme codée. Vous devez le paramètre :

106voto

Emil H Points 24062

Jordans analyse de pourquoi le tableau $_POST n’est pas peuplé est correcte. Toutefois, vous pouvez utiliser

pour juste récupérer le corps http et le manipuler vous-même. Voir entrée/sortie de PHP streams.

Dans une perspective de protocole, c’est effectivement plus correcte, puisque vous ne traitez pas vraiment les données http multipart forme quand même. En outre, utiliser application/json comme type de contenu lors de la validation de votre demande.

18voto

Jordan S. Jones Points 7724

Je crois que vous avez trouvé un tableau vide car PHP attend les données publiées dans un format de chaîne de requête (clé = valeur & clé1 = valeur1).

Essayez de modifier votre demande de courbure afin de :

et voir si cela aide tout.

13voto

Chris Knadler Points 1755

Vous devrez régler un supplément de quelques drapeaux de sorte que curl envoie les données en JSON.

commande

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

drapeaux

  • -H: en-tête personnalisé, argument suivant devrait être en-tête
  • -X: HTTP personnalisé le verbe, l'argument suivant est prévu pour être verbe
  • -d: envoie l'argument suivant que les données dans une requête HTTP POST

ressources

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X