พารามิเตอร์ URL บรรทัดคำสั่ง CURL


186

ฉันพยายามส่งDELETEคำขอด้วยพารามิเตอร์ url โดยใช้ CURL ฉันกำลังทำ:

curl -H application/x-www-form-urlencoded -X DELETE http://localhost:5000/locations` -d 'id=3'

อย่างไรก็ตามเซิร์ฟเวอร์ไม่เห็นพารามิเตอร์ id = 3 ฉันลองใช้แอปพลิเคชั่น GUI บางตัวและเมื่อฉันส่ง URL เป็น: http://localhost:5000/locations?id=3มันใช้งานได้ ฉันต้องการใช้ CURL แทนแอปพลิเคชัน GUI นี้ ใครช่วยชี้ให้เห็นสิ่งที่ฉันทำผิดได้ไหม

คำตอบ:


269

ส่วนหัว "application / x-www-form-urlencoded" ทำไม? ลองดูสิ:

curl -X DELETE 'http://localhost:5000/locations?id=3'

หรือ

curl -X GET 'http://localhost:5000/locations?id=3'

30
มันได้ผล ฉันเพิ่งรู้ว่า URL จะต้องอยู่ระหว่างเครื่องหมายคำพูดเพื่อยอมรับพารามิเตอร์ ชนิด MIME นั้นใช้สำหรับ URL ที่มีพารามิเตอร์และนั่นคือสิ่งที่แอปพลิเคชัน GUI ใช้ GETนอกจากนี้ผมไม่ต้องการที่จะทำ ฉันต้องการDELETEและไม่GETและฉันพยายามที่จะปฏิบัติตามมาตรฐานการออกแบบ REST ที่เหมาะสมดังนั้นฉันจึงใช้ DELETE ไม่ใช่ GET เมื่อทำการลบ
darksky

1
ในกรณีของฉันมันทำงานได้เฉพาะกับใบเสนอราคาสองครั้งโดยมีใบเสนอราคาเดียวใน curl กล่าวว่า: (1) http 'โปรโตคอลไม่ได้รับการสนับสนุนหรือปิดการใช้งานใน libcurl แต่ด้วย "" การเสนอราคาทำงานได้ดี
Jeff_Alieffson

150

Felipsmartins ถูกต้อง

เป็นมูลค่าการกล่าวขวัญว่าเป็นเพราะคุณไม่สามารถใช้ตัวเลือกข้อมูล -d / - ถ้านี่ไม่ใช่คำขอ POST แต่นี่ยังคงเป็นไปได้หากคุณใช้ตัวเลือก -G

ซึ่งหมายความว่าคุณสามารถทำได้:

curl -X DELETE -G 'http://localhost:5000/locations' -d 'id=3'

ที่นี่มันค่อนข้างงี่เง่า แต่เมื่อคุณอยู่ในบรรทัดคำสั่งและคุณมีพารามิเตอร์จำนวนมากมันจะเป็นระเบียบมากขึ้น

ฉันกำลังพูดถึงสิ่งนี้เพราะคำสั่ง cURL มักจะค่อนข้างยาวดังนั้นมันจึงคุ้มค่าที่จะให้มันมากกว่าหนึ่งบรรทัดเพื่อหลีกเลี่ยงการขึ้นบรรทัดใหม่

curl -X DELETE -G \
'http://localhost:5000/locations' \
-d id=3 \
-d name=Mario \
-d surname=Bros

เห็นได้ชัดว่านี่คือความสะดวกสบายมากขึ้นถ้าคุณใช้ zsh ฉันหมายถึงเมื่อคุณต้องการแก้ไขคำสั่งก่อนหน้าอีกครั้งเพราะ zsh ช่วยให้คุณไปทีละบรรทัด (แค่พูด)

หวังว่ามันจะช่วย


11
ช่วยชีวิต! ขอบคุณคน! ฉันมีสคริปต์ที่ฉันต้องการใช้ --data-urlencode บน GET สิ่งนี้ทำให้ฉันไม่ต้องเข้ารหัสพารามิเตอร์ด้วยตนเอง ขอบคุณ!
Nathan Wallace

3
คุณหมายความว่า -X DELETE -G เป็นคำขอ POST หรือไม่
huggie

1
`-G, - รับใส่ข้อมูลโพสต์ใน URL และใช้ GET` ไม่เพียงเพิ่มข้อมูลโพสต์ไปยัง url, -X [method] จะมีความสำคัญกว่า (ที่มา: curl - ความช่วยเหลือและประสบการณ์)
DownloadPizza

สิ่งนี้จะทำให้เกิดความสับสนได้อย่างไร อาจสันนิษฐานได้ว่า--data-urlencode เพิ่มข้อมูลลงใน URL โดยไม่มีข้อยกเว้น แต่ตอนนี้คุณต้องรวมเข้ากับ--getเพื่อให้ใช้งานได้จริง
Jaakko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.