web-dev-qa-db-fra.com

Comment publier des données de corps brutes avec curl?

Avant de poster ceci comme un duplicata; J'ai essayé plusieurs des suggestions que j'ai trouvées autour de SO.

Jusqu'ici, j'utilisais postman pour publier des données sur un service Web Java. Cela fonctionne très bien comme suit:

enter image description here

Je veux maintenant faire la même chose en utilisant curl, alors je l'ai essayé en utilisant les méthodes suivantes:

$ curl -X POST --data "this is raw data" http://78.41.xx.xx:7778/
$ curl -X POST --data-binary "this is raw data" http://78.41.xx.xx:7778/
$ curl -X POST --data "@/home/kramer65/afile.txt" http://78.41.xx.xx:7778/
$ curl -X POST --data-binary "@/home/kramer65/afile.txt" http://78.41.xx.xx:7778/

Malheureusement, tous montrent un corps brut vide du côté récepteur.

Est-ce que quelqu'un sait ce que je fais mal ici? En quoi ma demande de virement est-elle différente de ma demande de facteur? Tous les conseils sont les bienvenus!

38
kramer65

--data de curl enverra par défaut Content-Type: application/x-www-form-urlencoded dans l'en-tête de la demande. Toutefois, lors de l'utilisation du mode body raw de Postman, Postman envoie Content-Type: text/plain dans l'en-tête de la requête.

Donc, pour obtenir la même chose que Postman, spécifiez -H "Content-Type: text/plain" pour curl:

curl -X POST -H "Content-Type: text/plain" --data "this is raw data" http://78.41.xx.xx:7778/

Notez que si vous souhaitez consulter la demande complète envoyée par Postman, vous pouvez activer le débogage pour une application compactée. Vérifiez ce lien pour toutes les instructions. Ensuite, vous pouvez inspecter l'application (clic droit dans Postman) et afficher toutes les demandes envoyées par Postman dans l'onglet network:

enter image description here

49
Bertrand Martel