Comment envoyer / publier un fichier xml sur un serveur local http: // localhost: 8080 en utilisant curl depuis la ligne de commande?
Quelle commande dois-je utiliser?
Comment envoyer / publier un fichier xml sur un serveur local http: // localhost: 8080 en utilisant curl depuis la ligne de commande?
Quelle commande dois-je utiliser?
Réponses:
Si cette question est connectée à vos autres questions Hudson, utilisez la commande qu'elles fournissent. De cette façon, avec XML à partir de la ligne de commande:
$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url
Vous devez le modifier un peu pour lire un fichier:
$ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url
Lisez la page de manuel . suivant un résumé pour -d Parameter.
-d / - données
(HTTP) Envoie les données spécifiées dans une demande POST au serveur HTTP, de la même manière qu'un navigateur lorsqu'un utilisateur a rempli un formulaire HTML et appuie sur le bouton Soumettre. Cela entraînera curl à transmettre les données au serveur à l'aide de l'application de type de contenu / x-www-form-urlencoded. Comparer au formulaire -F / -.
-d / - les données sont les mêmes que --data-ascii. Pour publier des données purement binaires, vous devez plutôt utiliser l'option --data-binary. Pour encoder en URL la valeur d'un champ de formulaire, vous pouvez utiliser --data-urlencode.
Si l'une de ces options est utilisée plusieurs fois sur la même ligne de commande, les éléments de données spécifiés seront fusionnés avec un symbole & séparateur. Ainsi, l'utilisation de «-d nom = daniel -d compétence = moche» générerait un bloc de message qui ressemble à «nom = daniel et compétence = moche».
Si vous démarrez les données avec la lettre @, le reste doit être un nom de fichier pour lire les données, ou - si vous voulez que curl lise les données depuis stdin. Le contenu du fichier doit déjà être encodé en URL. Plusieurs fichiers peuvent également être spécifiés. La publication des données d'un fichier nommé 'foobar' se ferait donc avec --data @foobar.
--header "Content-Type:application/xml"
vous ne devez pas coder
-L
, ne l' utilisez pas-X POST
car cela fera que la demande redirigée utilisera aussi POST. Si vous utilisez simplement -d comme @Tai le suggère, cela ne se produira pas
-d
sauts de ligne sont supprimés des fichiers. Pour éviter cela, utilisez --data-binary
plutôt.
D'après la page de manuel , je pense que ce sont les droïdes que vous recherchez:
-F/--form <name=content>
(HTTP) Cela permet à curl d'émuler un formulaire rempli dans lequel un utilisateur a appuyé sur le bouton d'envoi. Cela provoque une boucle vers les données POST à l'aide des données de type / parties multiparties de type de contenu selon RFC2388. Cela permet de télécharger des fichiers binaires, etc. Pour forcer la partie «contenu» à être un fichier, préfixez le nom du fichier avec un signe @.
Exemple, pour envoyer votre fichier de mot de passe au serveur, où «mot de passe» est le nom du champ de formulaire dans lequel / etc / passwd sera l'entrée:
curl -F password=@/etc/passwd www.mypasswords.com
Donc, dans votre cas, ce serait quelque chose comme
curl -F file=@/some/file/on/your/local/disk http://localhost:8080
file=@-
est utile si vous souhaitez rediriger votre fichier vers.
Vous pouvez utiliser l'option --data avec le fichier.
Écrivez le contenu xml dans un fichier nommé soap_get.xml et utilisez la commande curl pour envoyer la demande:
curl -X POST --header "Content-Type: text / xml; charset = UTF-8" --data @ soap_get.xml your_url
Avec Jenkins 1.494, j'ai pu envoyer un fichier à un paramètre de tâche sur Ubuntu Linux 12.10 en utilisant curl
avec des --form
paramètres:
curl --form name=myfileparam --form file=@/local/path/to/your/file.xml \
-Fjson='{"parameter": {"name": "myfileparam", "file": "file"}}' \
-Fsubmit=Build \
http://user:password@jenkinsserver/job/jobname/build
Sur le serveur Jenkins, j'ai configuré un travail qui accepte un seul paramètre: un paramètre de téléchargement de fichier nommé myfileparam
.
La première ligne de cet appel curl construit un formulaire Web avec un paramètre nommé myfileparam
(identique à celui du travail); sa valeur sera le contenu d'un fichier sur le système de fichiers local nommé /local/path/to/your/file.txt
. Le @
préfixe du symbole indique à curl d'envoyer un fichier local au lieu du nom de fichier donné.
La deuxième ligne définit une demande JSON qui correspond aux paramètres du formulaire sur la première ligne: un paramètre de fichier nommé myfileparam
.
La troisième ligne active le bouton Build du formulaire. La quatrième ligne est l'URL du travail avec le suffixe "/ build".
Si cet appel réussit, curl revient 0
. S'il échoue, l'erreur ou l'exception du service est imprimée sur la console. Cette réponse prend beaucoup d' un ancien billet de blog concernant Hudson , que j'ai déconstruit et retravaillé pour mes propres besoins.
Voici comment vous pouvez POST XML sur Windows en utilisant la ligne de commande curl sur Windows. Mieux vaut utiliser le fichier batch / .cmd pour cela:
curl -i -X POST -H "Content-Type: text/xml" -d ^
"^<?xml version=\"1.0\" encoding=\"UTF-8\" ?^> ^
^<Transaction^> ^
^<SomeParam1^>Some-Param-01^</SomeParam1^> ^
^<Password^>SomePassW0rd^</Password^> ^
^<Transaction_Type^>00^</Transaction_Type^> ^
^<CardHoldersName^>John Smith^</CardHoldersName^> ^
^<DollarAmount^>9.97^</DollarAmount^> ^
^<Card_Number^>4111111111111111^</Card_Number^> ^
^<Expiry_Date^>1118^</Expiry_Date^> ^
^<VerificationStr2^>123^</VerificationStr2^> ^
^<CVD_Presence_Ind^>1^</CVD_Presence_Ind^> ^
^<Reference_No^>Some Reference Text^</Reference_No^> ^
^<Client_Email^>john@smith.com^</Client_Email^> ^
^<Client_IP^>123.4.56.7^</Client_IP^> ^
^<Tax1Amount^>^</Tax1Amount^> ^
^<Tax2Amount^>^</Tax2Amount^> ^
^</Transaction^> ^
" "http://localhost:8080"
Vous pouvez utiliser cette commande:
curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: <<Removed>>' -F file=@"/home/xxx/Desktop/customers.json" 'API_SERVER_URL' -k
Si vous utilisez curl sous Windows:
curl -H "Content-Type: application/xml" -d "<?xml version="""1.0""" encoding="""UTF-8""" standalone="""yes"""?><message><sender>Me</sender><content>Hello!</content></message>" http://localhost:8080/webapp/rest/hello
The contents of the file must already be URL-encoded.
Les fichiers XML d'OP ne le sont certainement pas.