Jak mogę wysłać / opublikować plik XML na serwerze lokalnym http: // localhost: 8080 przy użyciu curl z wiersza poleceń?
Jakiego polecenia powinienem użyć?
Jak mogę wysłać / opublikować plik XML na serwerze lokalnym http: // localhost: 8080 przy użyciu curl z wiersza poleceń?
Jakiego polecenia powinienem użyć?
Odpowiedzi:
Jeśli to pytanie jest powiązane z innymi pytaniami Hudsona, użyj polecenia, które podają. W ten sposób za pomocą XML z wiersza poleceń:
$ curl -X POST -d '<run>...</run>' \
http://user:pass@myhost:myport/path/of/url
Musisz to trochę zmienić, aby odczytać z pliku:
$ curl -X POST -d @myfilename http://user:pass@myhost:myport/path/of/url
Przeczytaj stronę podręcznika . zgodnie ze streszczeniem parametru -d.
-d / - dane
(HTTP) Wysyła określone dane w żądaniu POST do serwera HTTP, w taki sam sposób, jak przeglądarka, gdy użytkownik wypełni formularz HTML i naciska przycisk wysyłania. Spowoduje to, że curl przekaże dane do serwera za pomocą aplikacji typu treści / x-www-form-urlencoded. Porównaj z formularzem -F / -.
-d / - data jest taka sama jak --data-ascii. Aby opublikować dane czysto binarne, należy zamiast tego użyć opcji --data-binary. Aby zakodować URL wartości pola formularza, możesz użyć --data-urlencode.
Jeśli którakolwiek z tych opcji zostanie użyta więcej niż jeden raz w tym samym wierszu poleceń, określone elementy danych zostaną scalone razem z separatorem i symbolem. Tak więc użycie „-d name = daniel -d skill = lousy” wygeneruje fragment postu, który wygląda jak „name = daniel & skill = lousy”.
Jeśli zaczynasz dane literą @, reszta powinna być nazwą pliku, z którego można odczytać dane, lub - jeśli chcesz, aby curl odczytał dane ze standardowego wejścia. Zawartość pliku musi być już zakodowana w adresie URL. Można również podać wiele plików. Wysyłanie danych z pliku o nazwie „foobar” byłoby zatem wykonywane przy pomocy --data @foobar.
--header "Content-Type:application/xml"
który nie ma być kodowany w adresie URL
-L
, nie używaj, -X POST
ponieważ spowoduje to, że przekierowane żądanie będzie używać POST. Jeśli użyjesz -d jak sugeruje @Tai, tak się nie stanie
-d
usuwa podziały linii z plików. Aby tego uniknąć, użyj --data-binary
zamiast tego.
Z strony podręcznika uważam, że są to droidy, których szukasz:
-F/--form <name=content>
(HTTP) Pozwala to curl emulować wypełniony formularz, w którym użytkownik nacisnął przycisk wysyłania. Powoduje to zawijanie się do danych POST przy użyciu danych wieloczęściowych / formularzy typu treści zgodnie z RFC2388. Umożliwia to przesyłanie plików binarnych itp. Aby wymusić, aby część „treść” była plikiem, poprzedź nazwę pliku znakiem @.
Przykład: wysłanie pliku z hasłem na serwer, gdzie „hasło” to nazwa pola formularza, do którego należy wpisać / etc / passwd:
curl -F password=@/etc/passwd www.mypasswords.com
W twoim przypadku byłoby to coś takiego
curl -F file=@/some/file/on/your/local/disk http://localhost:8080
file=@-
jest przydatny, jeśli chcesz przesłać swój plik do potoku.
Możesz użyć opcji --data z plikiem.
Zapisz zawartość xml do pliku o nazwie soap_get.xml i za pomocą polecenia curl wyślij żądanie:
curl -X POST --header "Content-Type: text / xml; charset = UTF-8" --data @ soap_get.xml twoja_url
Z Jenkins 1.494, udało mi się wysłać plik do parametru pracy na Ubuntu 12.10 przy użyciu curl
z --form
parametrami:
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
Na serwerze Jenkins skonfigurowałem zadanie, które akceptuje jeden parametr: parametr wysyłania pliku o nazwie myfileparam
.
Pierwszy wiersz tego wywołania curl tworzy formularz internetowy z parametrem o nazwie myfileparam
(takim samym jak w zadaniu); jego wartością będzie zawartość pliku w lokalnym systemie plików o nazwie /local/path/to/your/file.txt
. @
Symbol przedrostka mówi curl wysłać plik lokalny zamiast podanej nazwie.
Drugi wiersz definiuje żądanie JSON pasujące do parametrów formularza w wierszu pierwszym: parametr pliku o nazwie myfileparam
.
Trzeci wiersz aktywuje przycisk kompilacji formularza. Czwarty wiersz to adres URL zadania z przyrostkiem „/ build”.
Jeśli to połączenie się powiedzie, curl powraca 0
. Jeśli się nie powiedzie, błąd lub wyjątek z usługi zostanie wydrukowany na konsoli. Ta odpowiedź wiele bierze ze starego posta na blogu dotyczącego Hudsona , który zdekonstruowałem i przerobiłem na własne potrzeby.
Oto, w jaki sposób możesz POST XML w systemie Windows za pomocą wiersza polecenia curl w systemie Windows. Lepiej użyj do tego pliku wsadowego / .cmd:
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"
Jeśli masz wiele nagłówków, możesz użyć następujących opcji:
curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url
Możesz użyć tego polecenia:
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
Jeśli używasz curl w systemie 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.
Pliki XML OP na pewno nie są.