Bagaimana cara mengirim header menggunakan permintaan HTTP melalui panggilan curl?

1448

Saya ingin mengirim tajuk ke server Apache saya di kotak Linux. Bagaimana saya bisa mencapai ini melalui panggilan curl?

gagneet
sumber
60
Ada cara yang baik untuk mempelajari cara menggunakan curl untuk permintaan http dengan contoh. Unduh versi terbaru dari Postman, buat konfigurasi permintaan http apa saja sesuai keinginan pada level antarmuka pengguna (posting, masukkan, dapatkan .. misalnya, dengan header dan json body) lalu klik "buat kode" dan pilih opsi "curl" . Ini memberi Anda baris perintah yang setara.
Vinicius Lima

Jawaban:

513

DAPATKAN:

dengan JSON:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" http://hostname/resource

dengan XML:

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://hostname/resource

POS:

Untuk mengirim data:

curl --data "param1=value1&param2=value2" http://hostname/resource

Untuk mengunggah file:

curl --form "[email protected]" http://hostname/resource

Posting HTTP yang tenang:

curl -X POST -d @filename http://hostname/resource

Untuk masuk ke situs (auth):

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/
Randhi Rupesh
sumber
apa yang dimaksud dengan @filename untuk posting RESTful? apakah Anda POSTing file ke server REST? yang tampaknya aneh bagi saya
JesseBoyd
6
Bagi orang-orang yang datang kemudian yang mungkin bertanya-tanya hal yang sama ... notasi adalah cara membaca data untuk dikirim ke server dari file, daripada memasukkannya ke dalam permintaan curl. Anda tidak POST file sendiri, Anda POSTing konten file sebagai tubuh permintaan POST Anda.
f1dave
Jawaban lebih rinci di sini: stackoverflow.com/questions/14978411/... :)
Amith Koujalgi
1983

man curl:

   -H/--header <header>
          (HTTP)  Extra header to use when getting a web page. You may specify
          any number of extra headers. Note that if you should  add  a  custom
          header that has the same name as one of the internal ones curl would
          use, your externally set header will be used instead of the internal
          one.  This  allows  you  to make even trickier stuff than curl would
          normally do. You should not replace internally set  headers  without
          knowing  perfectly well what you're doing. Remove an internal header
          by giving a replacement without content on the  right  side  of  the
          colon, as in: -H "Host:".

          curl  will  make sure that each header you add/replace get sent with
          the proper end of line marker, you should thus not  add  that  as  a
          part  of the header content: do not add newlines or carriage returns
          they will only mess things up for you.

          See also the -A/--user-agent and -e/--referer options.

          This option can be used multiple times to add/replace/remove  multi-
          ple headers.

Contoh:

curl --header "X-MyHeader: 123" www.google.com

Anda dapat melihat permintaan yang dikirim oleh curl dengan menambahkan -vopsi.

Tader
sumber
74
Jika Anda ingin mengirim beberapa tajuk menggunakan lebih dari satu tajuk, tidak apa-apa, ikal akan menguraikan masing-masing sebagai tajuk yang berbeda. Tidak ada cara untuk memisahkan header di dalam parameter - header yang sama. contoh: curl --header "Terima: javascript" --header "test: hello" -v www.google.com
Hatoru Hansou
2
Jika orang ingin contoh, saya akan meninggalkan ini di sini: bropages.org
Peter Westmacott
halaman manual (pada OSX, setidaknya) sekarang DO termasuk contoh: Contoh: # curl -H "X-First-Name: Joe" 192.168.0.1
JESii
6
@ MartinKonicek dan yang lainnya: SAYA SANGAT merekomendasikan util tldr (buatan, instal tldr dll). Ini satu-satunya contoh. mis. "- Kirim permintaan dengan header tambahan, menggunakan metode HTTP khusus: curl -H 'X-My-Header: 123' -X PUT example.com "
280

Dalam PHP :

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue'));

atau Anda dapat mengatur beberapa:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('HeaderName:HeaderValue', 'HeaderName2:HeaderValue2'));
James
sumber
1
@ James berfungsi dengan baik dalam beberapa kasus, tetapi dalam kasus lain CURL mengirim tajuk tambahan "Harapkan: 100-lanjut" - ada ide tentang cara menghapusnya?
coding_idiot
@coding_idiot: Anda bisa meneruskan "Harapkan:" dalam array nilai header untuk menonaktifkannya. Mis .: curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ('HeaderName: HeaderValue', 'Expect:'));
eter
12
OP tidak mengatakan apa-apa tentang pemikiran PHP
hanshenrik
Nama header ditulis dengan huruf besar dengan garis bawah, dan HTTP_ diawali. Misalnya, "perlindungan-token" menjadi "HTTP_PROTECTION_TOKEN".
Bimal Poudel
44

DAPATKAN (beberapa parameter):

curl -X  GET "http://localhost:3000/action?result1=gh&result2=ghk"

atau

curl --request  GET "http://localhost:3000/action?result1=gh&result2=ghk"

atau

curl  "http://localhost:3000/action?result1=gh&result2=ghk"

atau

curl -i -H "Application/json" -H "Content-type: application/json"  "http://localhost:3000/action?result1=gh&result2=ghk"
Vietnhi Phuvan
sumber
1
Terima kasih. Saya tidak menyadari kutipan wajib untuk url semacam ini.
remat_br
12

Saya menggunakan tukang pos.

Jalankan panggilan apa pun yang ingin Anda lakukan. Kemudian, tukang pos menyediakan alat praktis untuk menampilkan kode keriting.

Jalankan di terminal. masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Rajendra Prasad Patil
sumber
Ini adalah retasan yang bagus untuk mempercepat, tetapi berhati-hatilah untuk menghindari tanda kutip tunggal atau tanda kutip ganda jika Anda menggunakan skrip shell di windows karena skrip shell memiliki persyaratan pemformatan sendiri
Thierrydev
Sementara tukang pos adalah alat yang bagus tetapi ketika Anda tidak memiliki lingkungan grafis seperti di pod Kubernetes itu tidak berguna. Pelajari ikal dan Anda selalu dapat menguji istirahat.
Namphibian
11

Anda juga dapat mengirim beberapa tajuk, data (misalnya JSON), dan menentukan metode Panggilan (POST, GET) ke dalam panggilan CUrl tunggal seperti ini:

curl -X POST(Get or whatever) \
  http://your_url.com/api/endpoint \
  -H 'Content-Type: application/json' \
  -H 'header-element1: header-data1' \
  -H 'header-element2: header-data2' \

...... lebih banyak header ................

  -d '{
  "JsonExArray": [
    {
      "json_prop": "1",
    },
    {
      "json_prop": "2",
    }
  ]
}'
LeMeme
sumber
9

Saya telah beralih dari curl ke Httpie ; sintaks terlihat seperti:

http http://myurl HeaderName:value
Graham Perks
sumber
7

Jika Anda ingin mengirim tajuk khusus , Anda dapat melakukannya dengan cara ini:

curl -v -H @{'custom_header'='custom_header_value'} http://localhost:3000/action?result1=gh&result2=ghk
Palsri
sumber
2

Dalam anaconda envirement melalui windows perintahnya harus: GET, misalnya:

curl.exe http://127.0.0.1:5000/books 

Poskan atau tempelkan data untuk contoh:

curl.exe http://127.0.0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\"rating\":\"2\"}' 

PS: Tambahkan backslash untuk data json untuk menghindari jenis kesalahan ini => Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)

dan gunakan curl.exealih-alih curlhanya untuk menghindari masalah ini:

Invoke-WebRequest : Cannot bind parameter 'Headers'. Cannot convert the "Content-Type: application/json" value of type
"System.String" to type "System.Collections.IDictionary".
At line:1 char:48
+ ... 0.1:5000/books/8 -X PATCH -H "Content-Type: application/json" -d '{\" ...
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
DINA TAKLIT
sumber