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

342

Как отправить/отправить файл xml на локальный сервер http://localhost:8080 с помощью curl из командной строки?

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

Теги:
curl
command-line

9 ответов

437
Лучший ответ

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

$ curl -X POST -d '<run><log encoding="hexBinary">4142430A</log><result>0</result><duration>2000</duration></run>' \
http://user:pass@myhost/hudson/job/_jobName_/postBuildResult

Вам нужно немного изменить его для чтения из файла:

 $ curl -X POST -d @myfilename http://user:pass@myhost/hudson/job/_jobName_/postBuildResult

Прочитайте manpage. после абстракции для параметра -d.

-d/- данные

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

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

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

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

  • 0
    спасибо Петру большое !! тебя грохнули это связано только с этим, и вы абсолютно правы .. спасибо еще раз. :-)
  • 1
    Прочтите справочную страницу. The contents of the file must already be URL-encoded. XML-файлы OP, конечно же, нет.
Показать ещё 7 комментариев
162

Из manpage, я считаю, что это дроидов, которые вы ищете:

-F/--form <name=content>

(HTTP) Это позволяет скручивать эмулировать заполненную форму, в которой пользователь нажал кнопку отправки. Это вызывает завихрение данных 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

  • 11
    Это решение имеет дополнительное преимущество, заключающееся в возможности присвоения имени отправляемому файлу (в отличие от выбранного выше решения), и, следовательно, вы можете, например, отправить несколько файлов.
  • 12
    Формат file=@- полезен, если вы хотите передать свой файл в.
Показать ещё 5 комментариев
38

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

Напишите содержимое xml в файл с именем soap_get.xml и с помощью команды curl для отправки запроса:

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

  • 0
    Это должен быть ответ, так как ФП просит о публикации файла, а не встроенного текста.
19

С Jenkins 1.494 я ​​смог отправить файл в параметр job на 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.

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

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

3

Здесь вы можете использовать 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^>[email protected]^</Client_Email^>       ^
        ^<Client_IP^>123.4.56.7^</Client_IP^>                 ^
        ^<Tax1Amount^>^</Tax1Amount^>                         ^
        ^<Tax2Amount^>^</Tax2Amount^>                         ^
    ^</Transaction^>                                          ^
" "http://localhost:8080"
2

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

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 
2

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

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

У меня есть XML файл в каком-то каталоге Linux, и я пытаюсь отправить его в остальные API? Есть ли следующий способ сделать это? $ curl -X POST -d @filename http://хост/конечная точка

API ожидает XML. Вышесказанное отправит файл или его содержимое? Спасибо

0

Если вы используете завиток в 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню