Come posso inviare / pubblicare un file xml su un server locale http: // localhost: 8080 usando curl dalla riga di comando?
Quale comando dovrei usare?
Come posso inviare / pubblicare un file xml su un server locale http: // localhost: 8080 usando curl dalla riga di comando?
Quale comando dovrei usare?
Risposte:
Se quella domanda è collegata alle altre tue domande su Hudson, usa il comando che forniscono. In questo modo con XML dalla riga di comando:
$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url
Devi cambiarlo un po 'per leggere da un file:
$ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url
Leggi la manpage . seguendo un abstract per -d Parameter.
-d / - dati
(HTTP) Invia i dati specificati in una richiesta POST al server HTTP, come fa un browser quando un utente ha compilato un modulo HTML e preme il pulsante di invio. Ciò farà arricciare i dati al server utilizzando il tipo di contenuto application / x-www-form-urlencoded. Confronta con -F / - form.
-d / - i dati sono gli stessi di --data-ascii. Per pubblicare dati puramente binari, devi invece usare l'opzione --data-binary. Per codificare l'URL del valore di un campo modulo è possibile utilizzare --data-urlencode.
Se una di queste opzioni viene utilizzata più di una volta sulla stessa riga di comando, i pezzi di dati specificati verranno uniti con un simbolo & di separazione. Quindi, usando '-d name = daniel -d skill = lousy' si genererebbe un post post che assomiglia a 'name = daniel & skill = lousy'.
Se inizi i dati con la lettera @, il resto dovrebbe essere un nome di file da cui leggere i dati, oppure - se vuoi che l'arricciatura legga i dati da stdin. Il contenuto del file deve essere già codificato nell'URL. È inoltre possibile specificare più file. La pubblicazione di dati da un file chiamato "foobar" verrebbe quindi eseguita con --data @foobar.
--header "Content-Type:application/xml"
che non ti aspetti che codifichi URL
-L
, non usarlo -X POST
perché farà reindirizzare la richiesta anche usando POST. Se usi solo -d come suggerisce @Tai, questo non accadrà
-d
elimina le interruzioni di riga dai file. Per evitare ciò, utilizzare --data-binary
invece.
Dalla manpage , credo che questi siano i droidi che stai cercando:
-F/--form <name=content>
(HTTP) Ciò consente all'arricciatura di emulare un modulo compilato in cui un utente ha premuto il pulsante di invio. Ciò provoca l'arricciamento dei dati POST utilizzando il tipo di contenuto multipart / form-data secondo RFC2388. Ciò consente il caricamento di file binari ecc. Per forzare la parte 'content' in un file, aggiungere il prefisso al nome del file con un segno @.
Esempio, per inviare il file della password al server, dove "password" è il nome del campo modulo a cui / etc / passwd sarà l'input:
curl -F password=@/etc/passwd www.mypasswords.com
Quindi nel tuo caso, sarebbe qualcosa del genere
curl -F file=@/some/file/on/your/local/disk http://localhost:8080
file=@-
è utile se vuoi reindirizzare il tuo file.
Puoi usare l'opzione --data con il file.
Scrivi il contenuto XML in un file chiamato soap_get.xml e usa il comando curl per inviare la richiesta:
curl -X POST --header "Content-Type: text / xml; charset = UTF-8" --data @ soap_get.xml your_url
Con Jenkins 1.494, sono stato in grado di inviare un file a un parametro di lavoro su Ubuntu Linux 12.10 utilizzando curl
con i --form
parametri:
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
Sul server Jenkins, ho configurato un lavoro che accetta un singolo parametro: un parametro di caricamento file denominato myfileparam
.
La prima riga di quella chiamata a ricciolo costruisce un modulo web con un parametro chiamato myfileparam
(uguale al lavoro); il suo valore sarà il contenuto di un file nel file system locale denominato /local/path/to/your/file.txt
. Il @
prefisso del simbolo indica all'arricciatura di inviare un file locale anziché il nome file specificato.
La seconda riga definisce una richiesta JSON che corrisponde ai parametri del modulo nella prima riga: un parametro file denominato myfileparam
.
La terza riga attiva il pulsante Build del modulo. La quarta riga è l'URL del lavoro con il suffisso "/ build".
Se questa chiamata ha esito positivo, il ricciolo ritorna 0
. Se non riesce, l'errore o l'eccezione dal servizio viene stampato sulla console. Questa risposta prende molto da un vecchio post sul blog relativo a Hudson , che ho decostruito e rielaborato per le mie esigenze.
Ecco come puoi POST XML su Windows usando la linea di comando curl su Windows. Meglio usare il file batch / .cmd per quello:
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"
Puoi usare questo comando:
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
Se stai usando l' arricciatura su 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.
I file XML di OP sicuramente non lo sono.