จะทำการร้องขอ PUT ด้วย curl ได้อย่างไร


คำตอบ:


566

การใช้-Xแฟล็กด้วยกริยา HTTP ที่คุณต้องการ:

curl -X PUT -d arg=val -d arg2=val2 localhost:8080

ตัวอย่างนี้ยังใช้การ-dตั้งค่าสถานะเพื่อให้ข้อโต้แย้งกับคำขอ PUT ของคุณ


17
"man curl" on -X: "โดยปกติแล้วคุณไม่ต้องการตัวเลือกนี้คำขอ GET, HEAD, POST และ PUT ทุกประเภทจะถูกเรียกใช้โดยใช้ตัวเลือกบรรทัดคำสั่งเฉพาะ" แต่ฉันไม่สามารถหาวิธีอื่นได้
Martin C. Martin

44
หนึ่งปีต่อมาฉันพบวิธี! curl -T
Martin C. Martin

2
ในฐานะที่เป็นคำตอบของมาร์ตินซีมาร์ตินยังเปลี่ยนเป็น GET หลังจากเปลี่ยนเส้นทางจากเซิร์ฟเวอร์นี้เป็นคำตอบที่มีประโยชน์มากขึ้นในความคิดของฉัน
Martin

2
เพื่อให้บรรลุการGETเปลี่ยนเส้นทางหลังให้เพิ่มพารามิเตอร์--location
Martin M

1
Curl 7.47 และนี่จะไม่เหมาะกับฉัน คำตอบของ theabraham มักจะเริ่มต้นที่โพสต์พฤติกรรม --get (หรือ -G) อย่างไรก็ตามจะบังคับให้ฟิลด์ -d (--data) กลายเป็นพารามิเตอร์ url และทำงานได้
James Powell

101

คำตอบที่รวดเร็ว:

ในบรรทัดเดียวคำสั่ง curl จะเป็น:

a) หากส่งข้อมูลแบบฟอร์ม:

curl -X PUT -H "Content-Type: multipart/form-data;" -F "key1=val1" "YOUR_URI"

b) หากส่งข้อมูลดิบเป็น json:

curl -X PUT -H "Content-Type: application/json" -d '{"key1":"value"}' "YOUR_URI"

c) หากส่งไฟล์ที่มีคำขอ POST:

curl -X POST "YOUR_URI" -F 'file=@/file-path.csv'

ทางเลือกอื่น ๆ :

คุณสามารถใช้แอปPOSTMANจาก Chrome Store เพื่อรับคำขอ cURL ที่เทียบเท่า สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อเขียนคำขอที่ซับซ้อนมากขึ้น

สำหรับคำขอที่มีรูปแบบอื่นหรือสำหรับไคลเอนต์ที่แตกต่างกันเช่น java, PHP คุณสามารถตรวจสอบ POSTMAN / ความคิดเห็นด้านล่าง

POSTMAN เพื่อรับรหัสคำขอ


4
ไม่มีความคิดว่าทำไมสิ่งนี้จึงถูก downvote ... ฉันคัดลอกที่นี่ความคิดวิธีการผ่านร่างกาย JSON สำหรับขด PUT นอกจากนี้ยังมีบุรุษไปรษณีย์เป็นเครื่องมือที่น่ากลัวสวยที่จะได้รับรหัสขดสำหรับการค้นหาที่มีความซับซ้อนมากขึ้น :)
มิคาเอลLepistö

2
ขอบคุณ !! แม้ว่าฉันจะไม่มีความคิดใด ๆ ว่าทำไมเกี่ยวกับ downvotes อาจจะฝืนใจของผู้ใช้ที่จะยอมรับมัน ฉันได้สร้าง REST apis ทั้งหมดของฉันสำหรับมือถือใน POSTMAN และนั่นเป็นเคล็ดลับการเพิ่มประสิทธิภาพที่ดีที่สุดที่ฉันสามารถแนะนำให้ทุกคนที่ทำงานกับ REST
Prateek

ตัวอย่างโลกแห่งความจริงที่ฉันส่งข้อมูล json และพารามิเตอร์ในจุดสิ้นสุด; curl -X PUT -H "Content-Type: application / json" -d '{"จำนวน": "999", "type": "car", "parent_id": "12345"}' localhost: 8080 / transactionervice / ท
รานแซ

1
ต้องติดตั้งเบราว์เซอร์ที่สมบูรณ์ (หากไม่มี Chrome) และส่วนขยายอาจเป็น overkill สำหรับบางคน อย่างน้อยคุณก็อาจจะให้ทางเลือกสำหรับเว็บเบราว์เซอร์ทั่วไป (การติดตั้งเริ่มต้น) อื่น ๆ เช่น Firefox ซึ่ง HttpRequester ทำหน้าที่คล้ายกัน
rbaleksandar

5
มันอาจถูกลดระดับลงเนื่องจากคำถามนั้นเกี่ยวกับการม้วนงอ
tuxayo

28

ตัวอย่าง PUT ตามความคิดเห็นของ Martin C. Martin:

curl -T filename.txt http://www.example.com/dir/

ด้วย-T(เหมือน--upload-file) curl จะใช้ PUT สำหรับ HTTP


8
แต่น่าเสียดายที่-Tแทนไม่มี-X PUTถ้าคุณต้องการที่จะระบุพารามิเตอร์ด้วยหรือ-d ส่งเนื้อหาของไฟล์ผ่าน PUT เพื่อให้บรรลุการเปลี่ยนเส้นทางหลังจากเพิ่มพารามิเตอร์-F-TGET--location
Martin M

เกิดอะไรขึ้นถ้า filename.txt อยู่ในเซิร์ฟเวอร์ระยะไกล
bosari

7
curl -X PUT -d 'new_value' URL_PATH/key

ที่ไหน

X - ตัวเลือกที่จะใช้สำหรับคำสั่งคำขอ

d - ตัวเลือกที่จะใช้เพื่อวางข้อมูลใน URL ระยะไกล

URL_PATH - URL ระยะไกล

new_value - ค่าที่เราต้องการนำไปคีย์ของเซิร์ฟเวอร์


5

ฉันมาถึงสายนี้ แต่ฉันก็มีความต้องการที่คล้ายกัน เนื่องจากสคริปต์ของฉันกำลังสร้างคำขอ curl แบบไดนามิกฉันต้องการโครงสร้างที่คล้ายกันของคำสั่งทั่ว GET, POST และ PUT

นี่คือสิ่งที่ได้ผลสำหรับฉัน

สำหรับคำขอPUT :

curl --request PUT --url http://localhost:8080/put --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

สำหรับคำขอPOST :

curl --request POST --url http://localhost:8080/post --header 'content-type: application/x-www-form-urlencoded' --data 'bar=baz&foo=foo1'

สำหรับคำขอGET :

curl --request GET --url 'http://localhost:8080/get?foo=bar&foz=baz'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.