Apa sintaks baris perintah cURL untuk melakukan permintaan POST?


2187

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


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 "fileupload=@my-file.txt" https://example.com/resource.cgi

Multipart dengan bidang dan nama file:

curl --form "fileupload=@my-file.txt;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.


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.


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>

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 

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.


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.


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"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.