408 votes

POST fichier XML en utilisant la ligne de commande cURL

Comment puis-je envoyer un fichier XML vers un serveur local ? http://localhost:8080 en utilisant cURL à partir de la ligne de commande ?

Quelle commande dois-je utiliser ?

524voto

Peter Schuetze Points 7735

Si cette question est liée à vos autres questions sur Hudson, utilisez la commande qu'ils 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 depuis un fichier :

 $ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url

Lire l'article page d'accueil . suivant un résumé pour -d Paramètre.

-d/--data

(HTTP) Envoie les données spécifiées dans une requête demande POST au serveur HTTP, de la même de la même manière qu'un navigateur le fait lorsque un utilisateur a rempli un formulaire HTML et appuie sur le bouton d'envoi. Cette opération curl transmettra les données au serveur serveur en utilisant le type de contenu application/x-www-form-urlencoded. Comparez avec -F/--form.

-d/--data est identique à --data-ascii. Pour afficher des données purement binaires, vous devez utiliser l'option --data-binary. Pour coder en URL la valeur d'un champ de formulaire vous pouvez utiliser --data-urlencode.

Si l'une de ces options est utilisée plus plusieurs fois sur la même ligne de commande, les éléments de données spécifiés seront fusionnés ensemble avec un symbole séparateur &-symbole. Ainsi, en utilisant '-d name=daniel -d skill=lousy' génère un fragment de message qui ressemble à name=daniel&skill=lousy'.

Si vous commencez les données par 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 à partir de stdin. Le contenu du fichier contenu du fichier doit déjà être encodé en URL. Plusieurs fichiers peuvent également être spécifiés. L'affichage des données d'un fichier nommé 'foobar' se fera donc avec --data @foobar.

1 votes

Merci beaucoup Peter !! vous avez vu juste. c'est lié à cela seulement et vous avez tout à fait raison. merci encore. :-)

3 votes

Lisez la page de manuel. The contents of the file must already be URL-encoded. Les fichiers XML de l'OP ne le sont sûrement pas.

56 votes

Tant que vous spécifiez le type de contenu --header "Content-Type:application/xml" vous n'êtes pas censé Codage de l'URL

195voto

Piskvor Points 46986

De la page d'accueil Je crois que ce sont les droïdes que vous cherchez :

-F/--form <name=content>

(HTTP) Ceci permet à curl d'émuler un formulaire rempli dans lequel l'utilisateur a appuyé sur le bouton "submit". Cela amène curl à POST des données en utilisant le Content-Type multipart/form-data selon la RFC2388. Cela permet de télécharger des fichiers binaires, etc. Pour forcer la partie 'content' à être un fichier, préfixez le nom du fichier avec le signe @.

Exemple, pour envoyer votre fichier de mots de passe au serveur, où 'password' est le nom du champ de formulaire dans lequel /etc/passwd sera entré :

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

12 votes

Cette solution présente l'avantage supplémentaire de pouvoir nommer le fichier envoyé (contrairement à la solution choisie ci-dessus), et vous pouvez donc, par exemple, envoyer plusieurs fichiers.

14 votes

Le format file=@- est utile si vous voulez insérer votre fichier dans le tube.

2 votes

Si vous souhaitez envoyer un fichier et d'autres informations : utilisez -F key=val -F key=val autant de fois que nécessaire. Enfermer tous les paramètres postaux dans une grande chaîne séparée par & ne fonctionne pas.

21voto

Steve HHH Points 3088

Avec Jenkins 1.494, j'ai pu envoyer un fichier à un paramètre de travail sur Ubuntu Linux 12.10 en utilisant curl con --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 (comme dans le job) ; sa valeur sera le contenu d'un fichier sur le système de fichiers local nommé /local/path/to/your/file.txt . El @ 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 requête JSON qui correspond aux paramètres du formulaire de 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 est réussi, curl retourne 0 . S'il échoue, l'erreur ou l'exception du service est imprimée dans la console. Cette réponse reprend beaucoup de un ancien article de blog relatif à Hudson que j'ai déconstruit et retravaillé pour mes propres besoins.

7voto

Gleb Esman Points 496

Voici comment vous pouvez POST XML sur Windows en utilisant la ligne de commande curl sur Windows. Il est préférable d'utiliser un 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"

0 votes

Comment formater la chaîne xml avant de l'utiliser avec la commande curl ?

2voto

Paul Vargas Points 10652

Si vous utilisez bouclette sur 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

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