Який синтаксис командного рядка cURL для запиту POST?


2186

Як я можу зробити запит POST за допомогою інструменту командного рядка cURL ?


curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data
svikramjeet

Відповіді:


2542

З полями:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

З окремими полями:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

Багатопартійна:

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

Багаточастинка з полями та ім'ям файлу:

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Без даних:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

Для отримання додаткової інформації дивіться посібник CURL . Підручник CURL щодо емуляції веб-браузера є корисним.

За допомогою libcurl використовуйте curl_formadd()функцію, щоб створити форму, перш ніж надсилати її звичайним чином. Додаткову інформацію див. У документації на лібкурл .

Для великих файлів розгляньте можливість додавання параметрів для показу прогресу завантаження:

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

-o outputПотрібно, в іншому разі не буде відображатися індикатор.


7
@LauriRanta --data-urlencode(без тире), принаймні в останніх версіях
waitinforatrain

4
Також працює, якщо вам потрібно оновити ресурс за допомогою PUT: curl -X PUT ...
Subfuzion

3
У мене виникають проблеми з розумінням ... коли я це зробив With Fields, коли Multipartі коли Without Data?
CodyBugstein

7
Замість --dataвас можна використовувати -d.
користувач35538

у мене є масив полів. як я можу це зробити?
ARUNBALAN NV

507

Для RESTful HTTP POST, що містить XML:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

або для JSON, використовуйте це:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

Це прочитає вміст названого файлу filename.txtта надішле його як запит на публікацію.


13
@ tom-wijsman пояснення: curl -X POSTпередбачає HTTP POST-запит, -dпараметр (довга версія :) --dataповідомляє curl, що далі буде параметром POST, і @filenameвизначає вміст файлу filenameяк параметр. Цей підхід найкраще працює з RESTful HTTP API, як це можна знайти на Twitter, Facebook, різних інших веб-сервісах, включаючи Ruby on Rails, а також HTTP API баз даних, таких як CouchDB. REST розшифровується як державна передача Представництва
звуковий монстр

1
Як ми можемо бачити відповідь xml не в одному рядку, а відформатованому?
Віталій Зданевич

6
Я думаю, що ти можеш відійти від того, -X POSTщо мається на увазі -d.
benjifisher

Як дати кілька заголовків?
кея

Кілька заголовків: curl -H "header2: 1" -H "header2: 2" ...
Tomáš Kratochvíla



61

Якщо ви хочете увійти на сайт, зробіть наступне:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

Перший запит зберігає файли cookie сеансу (який надається після успішного входу) у файл "заголовки". Відтепер ви можете використовувати цей файл cookie для аутентифікації будь-якої частини веб-сайту, до якого ви зазвичай отримуєте доступ після входу в браузері.


6
примітка з чоловічої сторінки curl: "Опція -c, --cookie-jar є кращим способом зберігання файлів cookie".
maxschlepzig

32
curl -v --data-ascii var=value http://example.com

і є ще багато варіантів, перевірте curl --helpдля отримання додаткової інформації.


27

Якщо вам лінь, ви можете змусити google-chrome виконати всю роботу за вас.

  1. Клацніть правою кнопкою миші форму, яку ви бажаєте надіслати, і виберіть Оглянути . Це відкриє панель DevTools.
  2. Виберіть вкладку « Мережа » у програмах розробки та встановіть прапорець Зберегти журнал .
  3. Надішліть форму та знайдіть запис методом POST (клацніть правою кнопкою миші на будь-якому заголовку стовпця та переконайтесь, що метод позначено).
  4. Клацніть правою кнопкою миші рядок з POST та виберіть Copy > Copy as cURL .

chrome devtools: скопіюйте як CURL

Chrome скопіює всі дані запиту в синтаксис cURL

Chrome використовує, --data 'param1=hello&param2=world'які можна зробити більш читабельними, використовуючи один -dчи -Fпараметр, залежно від типу запиту POST, який ви бажаєте надіслати, який може бути application/x-www-form-urlencodedабо multipart/form-dataвідповідно.

Це буде POST-ed як application/x-www-form-urlencoded( використовується для більшості форм, які не містять файлів для завантаження ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

Для використання multipart/form-dataPOST -F( зазвичай використовується у формах, що містять завантаження файлів, або там, де важливий порядок полів, або де потрібно кілька полів з однаковою назвою ):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

User-AgentТема звичайно не потрібно, але я кинув його в усякому разі. Ви можете уникнути необхідності встановлення агента користувача на кожен запит, створивши ~/.curlrcфайл, який містить напрUser-Agent: "Mozilla/2.2"

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