web-dev-qa-db-fra.com

envoyer / publier un fichier XML à l'aide de la ligne de commande curl

Comment puis-je envoyer/publier un fichier XML sur un serveur local http: // localhost: 808 en utilisant curl depuis la ligne de commande?

Quelle commande devrais-je utiliser?

361
Arnab Sen Gupta

Si cette question est liée à vos autres questions Hudson, utilisez la commande qu'elles fournissent. De cette façon avec XML depuis la ligne de commande:

$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url

Vous devez le changer un peu pour lire dans un fichier:

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

Lisez le page de manuel . après un résumé pour le paramètre -d.

-d/- data

(HTTP) Envoie les données spécifiées dans une requête POST au serveur HTTP, de la même manière qu'un navigateur le fait lorsqu'un utilisateur a rempli un formulaire HTML et appuie sur le bouton d'envoi. Ainsi, curl transmettra les données au serveur à l'aide du type de contenu application/x-www-form-urlencoded. Comparez à -F/- forme.

-d/- les données sont les mêmes que --data-ascii. Pour publier des données purement binaires, utilisez plutôt l'option --data-binary. Pour encoder l'URL de 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 données spécifiées seront fusionnées avec un symbole & séparé. Ainsi, utiliser '-d nom = daniel -d skill = moche' générerait un bloc de publication ressemblant à 'nom = daniel & skill = 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 souhaitez 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. L'enregistrement de données à partir d'un fichier nommé 'foobar' serait donc effectué avec --data @foobar.

468
Peter Schuetze

De la page de manuel , je crois que ce sont les droïdes que vous recherchez:

-F/--form <name=content>

(HTTP) Ceci permet à Curl d'émuler un formulaire rempli dans lequel un utilisateur a appuyé sur le bouton d'envoi. Cela provoque le curl sur POST données à l'aide des données multipart/form de type de contenu selon la RFC2388. Cela active le téléchargement de fichiers binaires, etc. Pour forcer la partie "contenu" à être un fichier, préfixez le nom du fichier avec un signe @.

Par 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

177
Piskvor

Vous pouvez utiliser l'option --data avec fichier.

Ecrivez le contenu XML dans un fichier nommé soap_get.xml et utilisez la commande curl pour envoyer la demande:

curl -X POST --header "Type de contenu: text/xml; charset = UTF-8" --data @ soap_get.xml your_url

45
NgaNguyenDuy

Avec Jenkins 1.494, j'ai pu envoyer un fichier à un paramètre de travail sous Ubuntu Linux 12.10 en utilisant curlavec les paramètres --form:

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é myfileparamname__.

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 de symbole @ indique à curl d’envoyer un fichier local au lieu du nom de fichier indiqué.

La deuxième ligne définit une demande JSON qui correspond aux paramètres de formulaire de la première ligne: un paramètre de fichier nommé myfileparamname__.

La troisième ligne active le bouton Générer du formulaire. La quatrième ligne est l'URL du travail avec le suffixe "/ build".

Si cet appel aboutit, curl renvoie 0. En cas d'échec, l'erreur ou l'exception du service est imprimée sur la console. Cette réponse prend beaucoup de n ancien post de blog relatif à Hudson , que j'ai déconstruit et retravaillé pour mes propres besoins.

19
Steve HHH

Voici comment vous pouvez POST XML sous Windows à l'aide de la ligne de commande curl sous 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^>[email protected]^</Client_Email^>       ^
        ^<Client_IP^>123.4.56.7^</Client_IP^>                 ^
        ^<Tax1Amount^>^</Tax1Amount^>                         ^
        ^<Tax2Amount^>^</Tax2Amount^>                         ^
    ^</Transaction^>                                          ^
" "http://localhost:8080"
6
Gleb Esman

Si vous avez plusieurs en-têtes, vous pouvez utiliser les éléments suivants:

curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url
3
Dheeraj R

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 
3
Musleh Uddin

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
0
Paul Vargas