надіслати / розмістити файл XML за допомогою командного рядка curl


Відповіді:


505

Якщо це питання пов'язане з вашими іншими питаннями Хадсона, використовуйте команду, яку вони надають. Таким чином з 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 передає дані на сервер за допомогою програми типу content / x-www-form-urlencoded. Порівняйте з -F / - формою.

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

Якщо будь-який із цих параметрів використовується більше одного разу в одному командному рядку, вказані фрагменти даних будуть об'єднані разом з роздільним & -символом. Таким чином, використання '-d name = daniel -d skill = lousy' генерує допис, який виглядає як 'name = daniel & skill = lousy'.

Якщо ви починаєте дані з літери @, решта має бути ім'ям файлу для читання даних з, або - якщо ви хочете, щоб curl читав дані з stdin. Вміст файлу повинен бути вже закодований URL-адресою. Можна також вказати кілька файлів. Опублікувати дані з файлу з назвою "foobar" таким чином буде виконуватися за допомогою --data @foobar.


2
Прочитайте сторінку. The contents of the file must already be URL-encoded.XML-файли OP точно не є.
Полковник Паніка

52
Поки ви вказуєте тип вмісту, від --header "Content-Type:application/xml"вас не передбачається кодування URL
полковник Паніка

12
Я просто додам, що якщо ви використовуєте "-d", він за замовчуванням відповідає POST, тому не потрібно також використовувати "-X".
Тал Лірон

4
якщо ви використовуєте параметр слідування переадресації curl -L, не використовуйте, -X POSTоскільки це призведе до того, що перенаправлений запит також використовує POST. Якщо ви просто використовуєте -d, як пропонує @Tai, цього не станеться
Tristan Havelick

18
Попереджуйте, що -dрядки смуг відривають від файлів. Щоб уникнути цього, використовуйте --data-binaryзамість цього.
Яр

189

З сторінки керівництва , я вважаю , що ці дроїд ви шукаєте:

-F/--form <name=content>

(HTTP) Це дозволяє згортати емульовану заповнену форму, в якій користувач натиснув кнопку подання. Це призводить до згортання даних POST, використовуючи багаточастинні / форма-дані типу вмісту відповідно до RFC2388. Це дозволяє завантажувати двійкові файли тощо. Щоб змусити частину "вмісту" бути файлом, префікс назви файла зі знаком @.

Наприклад, щоб надіслати файл пароля на сервер, де 'пароль' - це ім'я поля форми, до якого / etc / passwd буде вводитись:

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

Тож у вашому випадку це було б щось подібне
curl -F file=@/some/file/on/your/local/disk http://localhost:8080


11
Це рішення має додаткову перевагу в тому, що можна назвати файл, що надсилається (на відміну від обраного рішення вище), тому ви можете, наприклад, надсилати кілька файлів.
Девід Кернс

13
Формат file=@-корисний, якщо ви хочете передати свій файл.
Стівен Лу,

2
Якщо хтось хоче надіслати файл та іншу інформацію: використовуйте -F ключ = val -F ключ = val стільки разів, скільки вам потрібно. Замикання всіх параметрів публікації в одній великій рядку, розділеній & не працює.
hgolov

Чи можете ви згадати, як підготувати веб-сторінку, що приймає, щоб мати змогу отримувати файли, завантажені за допомогою curl з робочого столу?
SexyBeast

@Cupidvogel: як і будь-яке інше поле для завантаження файлів; немає спеціального поводження спеціально для завивки.
Пісквор вийшов з будівлі

47

Можна скористатися опцією --дані з файлом.

Напишіть вміст xml у файл з назвою soap_get.xml та за допомогою команди curl надішліть запит:

curl -X POST --header "Тип вмісту: text / xml; charset = UTF-8" --дані @ soap_get.xml your_url


Це має бути відповіддю, оскільки ОП просить розмістити файл, не вбудований текст.
Безстрашний

Це було необхідно для того, щоб він показав для мене "не втік" за допомогою весняного веб-сервера, дякую!
rogerdpack

20

З 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. The@Префікс символу говорить локон , щоб послати локальний файл замість даного файлу.

Другий рядок визначає запит JSON, який відповідає параметрам форми в першому рядку: параметр файлу з ім'ям myfileparam.

Третій рядок активує кнопку побудови форми. Четвертий рядок - це URL-адреса завдання з суфіксом "/ build".

Якщо цей виклик вдалий, curl повертається 0. Якщо це не вдалося, помилка або виняток із сервісу надрукується на консоль. Ця відповідь багато бере зі старої публікації в блозі, що стосується Хадсона , яку я деконструював і переробив для власних потреб.


6

Ось як можна розмістити XML у Windows за допомогою командного рядка curl у Windows. Краще використовувати для цього файл batch / .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"

Як у форматування рядка XML перед використанням з допомогою команди завитка
Чинмой

3

Якщо у вас є кілька заголовків, можливо, ви хочете скористатися наступним:

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

3

Ви можете використовувати цю команду:

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 

1

Якщо ви використовуєте 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.