Mon problème: Utiliser l'outil de ligne de commande pour boucler mon serveur localhost lors de l'envoi de données avec ma demande POST est ne fonctionne pas.
Ce qui semble être à l'origine de l'erreur: Imaginez quelque chose comme ça
curl -i -X POST -H 'Content-Type: application/json' -d '{"data1": "data goes here", "data2": "data2 goes here"}' http:localhost/path/to/api
Résultat des données retournées
curl: (6) Could not resolve Host: application; No data record of requested type
curl: (6) Could not resolve Host: data goes here,; No data record of requested type
curl: (6) Could not resolve Host: data2; No data record of requested type
curl: (3) [globbing] unmatched close brace/bracket at pos 16
Après quelques recherches, je me suis rendu compte que ce problème ne pourrait pas être le code sintax utilisé pour la requête car il fonctionne sur les shells UNIX.
Utilisez-vous éventuellement Windows? Cela ressemble donc à un shell complètement cassé qui ne traite pas correctement les guillemets simples ou doubles. Je viens d'essayer cette ligne de commande et cela a bien fonctionné sur ma machine Linux. http://curl.haxx.se/mail/archive-2011-03/0066.html
J'ai essayé de contourner ceux qui "s'en échappaient" mais cela ne fonctionnait toujours pas
2.
curl -i -X POST -H 'Type de contenu: application/json' -d '{\ "data1 \":\"les données vont ici \",\"data2 \":\"data2 va ici \"} 'http: // localhost/path/to/api
3.
curl -i -X POST -H 'Type de contenu: application/json' -d '{\ "data1 \":\"les données vont ici \",\"data2 \":\"data2 va ici \"} 'http: // localhost/path/to/api
Alors j'ai abandonné. Windows semble déconner avec l'objet JSON envoyé sur POST
J'ai rencontré le même problème sur mon ordinateur portable win7 x64 et j'ai réussi à le faire fonctionner avec la version curl qui est étiquetée Win64 - Generic w SSL en utilisant le format de ligne de commande très similaire:
C:\Projects\curl-7.23.1-win64-ssl-sspi>curl -H "Content-Type: application/json" -X POST http://localhost/someapi -d "{\"Name\":\"Test Value\"}"
Ce qui ne diffère de votre version 2e d'échappement qu'en utilisant des guillemets doubles autour de ceux échappés et la valeur du paramètre d'en-tête. Préférez certainement la syntaxe Linux plus.
Une autre alternative plus facile pour la ligne de commande que la lutte contre les guillemets consiste à placer le fichier json dans un fichier et à utiliser le préfixe @ des paramètres curl, par exemple. avec ce qui suit dans json.txt:
{ "syncheader" : {
"servertimesync" : "20131126121749",
"deviceid" : "testDevice"
}
}
alors dans mon cas je publie:
curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt
Maintient le json plus lisible aussi.
Solution alternative: Une solution plus conviviale que la ligne de commande:
Si vous recherchez un moyen convivial d’envoyer et de demander des données à l’aide de méthodes HTTP autres que de simples méthodes GET, vous recherchez probablement une extension chrome comme celle-ci http: // goo.gl/rVW22f appelé AVANCED REST CLIENT
Pour les gars cherchant à rester en ligne de commande, je recommande cygwin:
J'ai fini par installer cygwin avec CURL, ce qui nous permet de Obtenez ce sentiment Linux - sous Windows !
En utilisant la ligne de commande Cygwin, ces problèmes ont été résolus et le plus important, la syntaxe de requête utilisée sur 1. fonctionnait correctement.
Liens utiles:
Où je téléchargeais le curl pour la ligne de commande Windows?
Pour plus d’informations sur l’installation et la gestion de curl avec cygwin, cliquez ici
J'espère que cela aidera quelqu'un parce que j'ai passé toute la matinée à ce sujet.
Au moins pour la version binaire de Windows que j'ai testée (( le binaire générique Win64 no-SSL , actuellement basée sur 7.33. )), vous êtes soumis à des limitations dans l'utilisation de la commande les arguments de ligne sont en cours d'analyse. La réponse par Noël décrit la syntaxe correcte dans ce paramètre, qui fonctionne également dans un fichier de commandes. En utilisant l'exemple fourni:
curl -i -X POST -H "Content-Type: application/json" -d "{""data1"":""data goes here"",""data2"":""data2 goes here""}" http:localhost/path/to/api
Une alternative plus propre pour éviter de traiter avec des caractères d'échappement, qui dépend de la bibliothèque utilisée pour analyser la ligne de commande, consiste à avoir votre texte au format JSON standard dans un fichier séparé:
curl -i -X POST -H "Content-Type: application/json" -d "@body.json" http:localhost/path/to/api
Pour conserver les guillemets dans les données, essayez de les échapper deux fois de la manière suivante (\\ "").
curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}"
curl ... -d "{""data"": ""data \\""abc\\"" goes here""}"