отправка / публикация XML-файла с помощью командной строки curl - PullRequest
362 голосов
/ 09 июня 2010

Как я могу отправить / опубликовать файл xml на локальном сервере http://localhost:8080, используя curl из командной строки?

Какую команду мне использовать?

Ответы [ 8 ]

471 голосов
/ 09 июня 2010

Если этот вопрос связан с вашими другими вопросами Гудзона, используйте предоставленную ими команду. Этот способ с XML из командной строки:

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

Вам нужно немного изменить его, чтобы прочитать из файла:

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

Прочитайте справочную страницу . после абстрактного параметра -d.

-d / - данные

(HTTP) Отправляет указанные данные в POST-запрос к HTTP-серверу, в так же, как браузер делает, когда пользователь заполнил форму HTML и нажимает кнопку отправки. Это будет заставить curl передавать данные в сервер, использующий тип контента применение / х-WWW-форм-urlencoded. Сравните с формой -F / -

-d / - данные такие же, как --data-ascii. Чтобы публиковать данные исключительно в двоичном виде, вы должны вместо этого используйте параметр --data-binary. URL-кодировать значение формы поле, которое вы можете использовать --data-urlencode.

Если какой-либо из этих вариантов используется более чем один раз в той же командной строке, указанные данные будут объединены вместе с разделительной &-условное обозначение. Таким образом, используя '-d name = daniel -d skill = lousy 'сгенерирует чанк поста, который выглядит как 'Имя = Даниель и умение = паршиво.

Если вы начнете данные с буквы @, остальное должно быть именем файла читать данные, или - если вы хотите curl, чтобы прочитать данные со стандартного ввода. содержимое файла уже должно быть URL-кодировке. Несколько файлов также могут быть уточненным. Публикация данных из файла таким образом, с именем «Foobar» будет сделано с --data @ foobar.

178 голосов
/ 09 июня 2010

Из справочной страницы , я считаю, что вы ищете именно таких дроидов:

-F/--form <name=content>

(HTTP). Это позволяет curl эмулироватьзаполненная форма, в которой пользователь нажал кнопку отправки.Это вызывает скручивание в POST-данные с использованием multipart / form-data Content-Type в соответствии с RFC2388.Это позволяет загружать двоичные файлы и т. Д. Чтобы часть содержимого содержала файл, добавьте к имени файла префикс @.

Пример, чтобы отправить файл пароля на сервер, где «пароль» - это имя поля формы, в которое / etc / passwd будет ввод:

curl -F password=@/etc/passwd www.mypasswords.com

Так что в вашем случае это будет что-то вроде
curl -F file=@/some/file/on/your/local/disk http://localhost:8080

45 голосов
/ 29 октября 2014

Вы можете использовать опцию --data с файлом.

Запись XML-содержимого в файл с именем soap_get.xml и использование команды curl для отправки запроса:

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

19 голосов
/ 13 марта 2013

С Jenkins 1.494 я ​​смог отправить файл в параметр задания в Ubuntu Linux 12.10, используя curl с --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

На сервере Jenkins я настроил заданиекоторый принимает один параметр: параметр загрузки файла с именем myfileparam.

Первая строка этого вызова curl создает веб-форму с параметром с именем myfileparam (так же, как в задании);его значением будет содержимое файла в локальной файловой системе с именем /local/path/to/your/file.txt.Префикс символа @ указывает curl отправлять локальный файл вместо заданного имени файла.

Вторая строка определяет запрос JSON, который соответствует параметрам формы в первой строке: параметр файла с именем myfileparam.

Третья строка активирует кнопку Build формы.Четвертая строка - это URL-адрес задания с суффиксом "/ build".

Если этот вызов выполнен успешно, curl возвращает 0.Если это не удается, ошибка или исключение из службы выводится на консоль.Этот ответ берет много от старого сообщения в блоге, касающегося Хадсона , которое я разобрал и переработал для своих собственных нужд.

6 голосов
/ 20 ноября 2013

Вот как вы можете POST XML в Windows с помощью командной строки curl в Windows.Для этого лучше использовать пакетный / .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"
3 голосов
/ 31 декабря 2017

Вы можете использовать эту команду:

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 голосов
/ 23 июля 2015

Если у вас несколько заголовков, вы можете использовать следующее:

curl -X POST --header "Content-Type:application/json" --header "X-Auth:AuthKey" --data @hello.json Your_url
0 голосов
/ 08 августа 2014

Если вы используете curl в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...