Apa sintaks baris perintah cURL untuk melakukan permintaan POST?

2187

Bagaimana saya bisa membuat permintaan POST dengan alat baris perintah cURL ?

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

Jawaban:

2542

Dengan bidang:

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

Dengan bidang yang ditentukan secara individual:

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

Multipart:

curl --form "[email protected]" https://example.com/resource.cgi

Multipart dengan bidang dan nama file:

curl --form "[email protected];filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Tanpa data:

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

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

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

Untuk informasi lebih lanjut, lihat manual CURL . The Curl tutorial tentang meniru web browser membantu.

Dengan libcurl, gunakan curl_formadd()fungsi untuk membangun formulir Anda sebelum mengirimkannya dengan cara biasa. Lihat dokumentasi libcurl untuk informasi lebih lanjut.

Untuk file besar, pertimbangkan untuk menambahkan parameter untuk menunjukkan kemajuan unggahan:

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

The -o outputdiperlukan, jika tidak ada progress bar akan muncul.

Stephen Deken
sumber
7
@LauriRanta --data-urlencode(tanpa tanda hubung), dalam versi terbaru setidaknya
waitinforatrain
4
Juga berfungsi jika Anda perlu memperbarui sumber daya dengan PUT: curl -X PUT ...
Subfuzion
3
Saya mengalami kesulitan memahami ... kapan saya akan melakukannya With Fields, kapan dengan Multipartdan kapan Without Data?
CodyBugstein
7
Alih-alih --databisa Anda gunakan -d.
user35538
saya memiliki berbagai bidang. bagaimana saya bisa melakukan ini?
ARUNBALAN NV
507

Untuk POST HTTP TENANG yang berisi XML:

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

atau untuk JSON, gunakan ini:

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

Ini akan membaca isi file yang bernama filename.txtdan mengirimkannya sebagai permintaan posting.

Soundmonster
sumber
13
@ tom-wijsman penjelasan: curl -X POSTmenyiratkan permintaan HTTP POST, -dparameter (versi lama :) --datamemberi tahu curl bahwa yang berikut ini akan menjadi parameter POST, dan @filenamemenetapkan konten file filenamesebagai parameter. Pendekatan ini bekerja paling baik dengan API HTTP yang tenang seperti yang ditemukan di Twitter, Facebook, berbagai layanan web lainnya termasuk Ruby on Rails serta HTTP APIs dari basis data seperti CouchDB. REST adalah singkatan dari Representational State Transfer
Soundmonster
1
Bagaimana kita dapat melihat respons xml tidak dalam satu baris tetapi diformat?
Vitaly Zdanevich
6
Saya pikir Anda dapat meninggalkan -X POSTsejak itu tersirat oleh -d.
benjifisher
Bagaimana cara memberikan banyak header?
keya
Multiple Header: curl -H "header2: 1" -H "header2: 2" ...
Tomáš Kratochvíla
131

Data dari stdin dengan -d @-

Contoh:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

Keluaran:

<p>Hello <strong>world</strong>!</p>
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
6
Hebat jika Anda sudah memiliki objek JSON di clipboard
Luca Steeb
bahkan lebih baik: echo "$ message" | curl -H "Tipe-Konten: application / json" -d @ - "$ url"
rzr
66
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

adalah contoh yang ditemukan dalam Curl Example Manual .

Gunakan% 26 untuk ampersand meskipun jika di atas tidak berfungsi:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 
Patrick Desjardins
sumber
61

Jika Anda ingin masuk ke situs, lakukan hal berikut:

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

Permintaan pertama menyimpan cookie sesi (yang disediakan setelah login berhasil) dalam file "header". Mulai sekarang, Anda dapat menggunakan cookie itu untuk mengautentikasi Anda ke bagian mana pun dari situs web yang biasanya Anda akses setelah masuk dengan browser.

Martin Konecny
sumber
6
sebuah catatan dari halaman manual curl: 'Opsi -c, --cookie-jar adalah cara yang lebih baik untuk menyimpan cookie.'
maxschlepzig
32
curl -v --data-ascii var=value http://example.com

dan ada banyak opsi lagi, periksa curl --helpuntuk informasi lebih lanjut.

Vinko Vrsalovic
sumber
27

Jika Anda malas, Anda bisa mendapatkan google-chrome untuk melakukan semua pekerjaan untuk Anda.

  1. Klik kanan formulir yang ingin Anda kirim dan pilih Periksa . Ini akan membuka panel DevTools.
  2. Pilih tab Network di devtools dan centang kotak Preserve log .
  3. Kirim formulir dan temukan entri dengan metode POST (klik kanan pada tajuk kolom apa pun dan pastikan Metode dicentang).
  4. Klik kanan baris dengan POST, dan pilih Salin > Salin sebagai cURL .

chrome devtools: salin sebagai CURL

Chrome akan menyalin semua data permintaan dalam sintaks CURL.

Penggunaan Chrome --data 'param1=hello&param2=world'yang Anda dapat membuatnya lebih mudah dibaca dengan menggunakan satu -datau -Fper parameter tergantung pada jenis permintaan POST mana yang ingin Anda kirim, yang dapat berupa application/x-www-form-urlencodedatau multipart/form-datasesuai.

Ini akan POST-ed as application/x-www-form-urlencoded( digunakan untuk sebagian besar formulir yang tidak mengandung unggahan file ):

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

Untuk multipart/form-datapenggunaan POST -F( biasanya digunakan dengan formulir yang berisi unggahan file, atau urutan bidang yang penting, atau jika diperlukan beberapa bidang dengan nama yang sama ):

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

The User-Agentheader biasanya tidak diperlukan, tapi aku sudah dilemparkan itu hanya dalam kasus. Anda dapat menghindari keharusan mengatur agen pengguna pada setiap permintaan dengan membuat ~/.curlrcfile yang berisi misUser-Agent: "Mozilla/2.2"

ccpizza
sumber