2017-03-14 2 views
1

J'écris un script batch qui devrait envoyer une requête avec json.Comment envoyer une requête POST avec le corps json via curl à partir du script batch Windows

call curl -X POST -H 'Content-type: application/json' --data '{"text": "Pull requests:\n%linksText% has been deployed to %stagingServerUrl%", "username": "Staging Server"}' http://requestb.in/ovehwtov 

je lance mon script bash git et alhought il envoie la requête, le corps est malformé et juste avant qu'il envoie la demande, je vois des erreurs dans la console:

curl: (6) Couldn't resolve host 'application' 
curl: (6) Couldn't resolve host '"Pull' 
curl: (6) Couldn't resolve host 'requests:\nhttp' 
curl: (6) Couldn't resolve host 'has' 
curl: (6) Couldn't resolve host 'been' 
curl: (6) Couldn't resolve host 'deployed' 
curl: (6) Couldn't resolve host 'to' 
curl: (6) Couldn't resolve host 'unicorns2url",' 
curl: (6) Couldn't resolve host '"username"' 
curl: (6) Couldn't resolve host 'Staging' 
curl: (3) [globbing] unmatched close brace/bracket in column 8 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 11 0  2 100  9  6  30 --:--:-- --:--:-- --:--:-- 30ok 

Voilà comment ressemble corps:

'{"text": 

ce qui n'est pas correct.

Comme vous pouvez le voir je compose JSON à partir de variables, mais ce n'est pas la cause de l'échec: quand je les retire et appelle

call curl -X POST -H 'Content-type: application/json' --data '{"text": "Pull requests has been deployed to", "username": "Staging Server"}' http://requestb.in/ovehwtov 

La même erreur se produit.

Cependant, lorsque je copie cette commande à partir de mon script batch et que je la colle directement dans la console git bash Cela fonctionne parfaitement. Ne me demandez pas pourquoi j'exécute le script batch de Windows à partir de git bash, quand je pourrais écrire un script bash en utilisant le langage bash au lieu d'une syntaxe DOS déroutante et déroutante. Je ne m'en suis pas rendu compte quand j'ai commencé à écrire le script et c'est presque terminé (sauf pour cette partie). Comment le faire fonctionner? Merci!

+1

Dans les commandes interprétées par cmd, les jetons contenant des espaces doivent être placés entre guillemets. Essayez 'call curl -X POST -H" Type de contenu: application/json "--data" {'text': 'Tirer les requêtes: \ n% liensText% a été déployé sur% stagingServerUrl%', 'nom d'utilisateur': ' Serveur intermédiaire '} "http: // requestb.in/ovehwtov'. – rojo

+0

Merci, monsieur. Bien que les guillemets simples ne soient pas autorisés dans json, il devrait être 'call curl -X POST -H" Type de contenu: application/json "--data" {\ "text \": \ "Tirer les requêtes: \ n% linksText % a été déployé sur% stagingServerUrl% \ ", \" nom d'utilisateur \ ": \" Serveur de stockage intermédiaire \ "}" http: // requestb.in/qkebavqk' – dKab

Répondre

0

Essayez:

curl -X POST -H "Content-type: application/json" --data "{\"text\": \"Pull requests has been deployed to\", \"username\": \"Staging Server\"}" http://requestb.in/ovehwtov

Il est évident que les bonnes données.

Si vous utilisez Windows, vous devez utiliser "\".