Как я могу отправить / опубликовать XML-файл на локальном сервере http: // localhost: 8080, используя curl из командной строки?
Какую команду я должен использовать?
Как я могу отправить / опубликовать XML-файл на локальном сервере http: // localhost: 8080, используя curl из командной строки?
Какую команду я должен использовать?
Ответы:
Если этот вопрос связан с вашими другими вопросами Hudson, используйте команду, которую они предоставляют. Вот так с 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 передавать данные на сервер с помощью application-type / x-www-form-urlencoded. Сравните с -F / - формой.
-d / - данные такие же, как --data-ascii. Чтобы публиковать данные исключительно в двоичном формате, вы должны использовать опцию --data-binary. Для URL-кодирования значения поля формы вы можете использовать --data-urlencode.
Если какой-либо из этих параметров используется более одного раза в одной командной строке, указанные фрагменты данных будут объединены с разделительным символом & -symbol. Таким образом, использование '-d name = daniel -d skill = lousy' сгенерирует пост-чанк, который выглядит как 'name = daniel & skill = lousy'.
Если вы начинаете данные с буквы @, остальное должно быть именем файла для чтения данных, или - если вы хотите, чтобы curl считывал данные из stdin. Содержимое файла уже должно быть в кодировке URL. Несколько файлов также могут быть указаны. Публикация данных из файла с именем 'foobar', таким образом, будет выполняться с --data @foobar.
--header "Content-Type:application/xml"
вы не должны кодировать URL
-L
, не используйте -X POST
его, так как перенаправленный запрос также будет использовать POST. Если вы просто используете -d, как подсказывает @Tai, этого не произойдет
-d
полоски переносятся из файлов. Чтобы избежать этого, используйте --data-binary
вместо этого.
Из справочной страницы я считаю, что это те дроиды, которых вы ищете:
-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
file=@-
полезен, если вы хотите передать свой файл.
Вы можете использовать опцию --data с файлом.
Запишите содержимое XML в файл с именем soap_get.xml и с помощью команды curl отправьте запрос:
curl -X POST --header "Content-Type: text / xml; charset = UTF-8" --data @ soap_get.xml your_url
С Дженкинс 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
. @
Префикс символа говорит локон , чтобы послать локальный файл вместо данного файла.
Вторая строка определяет запрос JSON, который соответствует параметрам формы в первой строке: параметру файла с именем myfileparam
.
Третья строка активирует кнопку Build формы. Четвертая строка - это URL задания с суффиксом "/ build".
Если этот вызов успешен, curl возвращается 0
. Если это не удается, ошибка или исключение из службы выводится на консоль. Этот ответ многое берет из старого поста в блоге, касающегося Хадсона , который я разобрал и переработал для своих собственных нужд.
Вот как вы можете 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"
Вы можете использовать эту команду:
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
Если вы используете 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
The contents of the file must already be URL-encoded.
XML-файлы OP, конечно же, нет.