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?
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.
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 commecurl -F file=@/some/file/on/your/local/disk http://localhost:8080
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
Avec Jenkins 1.494, j'ai pu envoyer un fichier à un paramètre de travail sous Ubuntu Linux 12.10 en utilisant curl
avec 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é myfileparam
name__.
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é myfileparam
name__.
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.
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"
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
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