CURL kullanarak POST gövdesi, başlıkları ve HTTP paramleriyle nasıl gönderilir?


39

CURL'de basit POST komutlarının nasıl kullanılacağına dair pek çok örnek buldum, ancak aşağıdakileri içeren tam HTTP POST komutlarının nasıl gönderileceğine dair örnekler bulamadım:

  • Başlıklar (Temel Kimlik Doğrulama)
  • HTTP Params ( s=1&r=33)
  • Gövde Verileri, bazı XML dizeleri

Tüm bulduğum:

echo "this is body" | curl -d "ss=ss&qq=11" http://localhost/

Bu işe yaramaz ve HTTP parametrelerini gövde olarak gönderir.



Muhtemelen bir superuser.com/questions/149329/… adresinden geliyor gibi hissediyorum Bu sorunun başlıklar ve benzeri konularla ilgili olduğunu biliyorum, ancak diğer soruya verilen cevaplar da bunu ele alıyor. Genelde eski bir popüler soruyu dupe olarak işaretlemem ama bu bir istisnadır. Tamamlanması için bazı şeyleri taşımamız gerekebilir.
Michael Durrant,

Aslında, diğer cevap çok özel olarak bahseder --headerve bu söylemez
Michael Durrant 15

Yanıtlar:


14

Yorum yapmak için yeterli itibar yok, bu yüzden yardımcı olacağını umarak bir cevap olarak bırakın.

curl -L -v --post301 --post302 -i -X PUT -T "${aclfile}"  \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  ${host}:${port}${resource}

Bu S3 kova acl koymak operasyon için kullandığım şeydi. Başlıklar -H içinde ve bir xml dosyası olan gövde -T'yi izleyen $ {aclfile} cinsindendir. Bunu çıktıdan görebilirsiniz:

/aaa/?acl
* About to connect() to 192.168.57.101 port 80 (#0)
*   Trying 192.168.57.101...
* Connected to 192.168.57.101 (192.168.57.101) port 80 (#0)
> PUT /aaa/?acl HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.57.101
> Accept: */*
> Date: Thu, 18 Aug 2016 08:01:44 GMT
> Content-Type: application/x-www-form-urlencoded; charset=utf-8
> Authorization: AWS WFBZ1S6SO0DZHW2LRM6U:r84lr/lPO0JCpfk5M3GRJfHdUgQ=
> Content-Length: 323
> Expect: 100-continue
>
< HTTP/1.1 100 CONTINUE
HTTP/1.1 100 CONTINUE

* We are completely uploaded and fine
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< x-amz-request-id: tx00000000000000000001f-0057b56b69-31d42-default
x-amz-request-id: tx00000000000000000001f-0057b56b69-31d42-default
< Content-Type: application/xml
Content-Type: application/xml
< Content-Length: 0
Content-Length: 0
< Date: Thu, 18 Aug 2016 08:01:45 GMT
Date: Thu, 18 Aug 2016 08:01:45 GMT

<
* Connection #0 to host 192.168.57.101 left intact

url paragrafları "+" gibi özel işaretler içeriyorsa, her param (- özel işaretler içeren) için --data-urlencode kullanın:

curl -G -H "Accept:..." -H "..." --data-urlencode "beginTime=${time}+${zone}" --data-urlencode "endTime=${time}+${zone}" "${url}"

57

HTTP "parametreler" URL’nin bir parçasıdır:

"http://localhost/?name=value&othername=othervalue"

Temel kimlik doğrulamanın ayrı bir seçeneği vardır, özel bir başlık oluşturmanıza gerek yoktur:

-u "user:password"

POST "body" --data(for application/x-www-form-urlencoded) veya --form(for multipart/form-data) aracılığıyla gönderilebilir :

-F "foo=bar"                  # 'foo' value is 'bar'
-F "foo=<foovalue.txt"        # the specified file is sent as plain text input
-F "foo=@foovalue.txt"        # the specified file is sent as an attachment

-d "foo=bar"
-d "foo=<foovalue.txt"
-d "foo=@foovalue.txt"
-d "@entirebody.txt"          # the specified file is used as the POST body

--data-binary "@binarybody.jpg"

Yani, özetlemek gerekirse:

curl -d "this is body" -u "user:pass" "http://localhost/?ss=ss&qq=11"

@Emerson: Olması gereken; PHP'nin modülü, orijinal C libcurl'un sahip olduğu tüm fonksiyonlara sahip görünüyor ve yukarıdakiler oldukça temel bir özellik. Ancak kullanılacak tam işlevi bilmiyorum. Bulamazsanız, Yığın Taşması'na sorun.
Grawity
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.