curl -GET และ -X GET


126

Curl นำเสนอชุดของการเรียกใช้เมธอด http ที่แตกต่างกันซึ่งขึ้นต้นด้วย X แต่ยังเสนอวิธีการเดียวกันโดยไม่มี ฉันได้ลองทั้งสองอย่างแล้วและดูเหมือนจะไม่สามารถเข้าใจความแตกต่างได้ ใครช่วยอธิบายให้ฉันเข้าใจอย่างรวดเร็วว่าการดำเนินการทั้งสองนี้แตกต่างกันอย่างไร

คำตอบ:


264

โดยค่าเริ่มต้นคุณจะใช้ curl โดยไม่ต้องบอกอย่างชัดเจนว่าจะใช้วิธีการร้องขอใด หากคุณส่งผ่าน HTTP URL curl http://example.comก็จะใช้ GET หากคุณใช้-dหรือ-Fcurl จะใช้ POST -Iจะทำให้เกิด HEAD และ-Tจะทำให้เป็น PUT

-X [WHATEVER]หากมีเหตุผลอะไรก็ตามที่คุณไม่ได้มีความสุขกับตัวเลือกเริ่มต้นเหล่านี้ที่ไม่ขดสำหรับคุณคุณสามารถแทนที่วิธีการร้องขอเหล่านั้นโดยระบุ curl -X DELETE [URL]วิธีนี้คุณสามารถส่งตัวอย่างเช่นลบโดยการทำ

ดังนั้นจึงไม่มีจุดหมายที่จะทำcurl -X GET [URL]ตามที่ GET จะใช้ต่อไป ในหลอดเลือดดำเดียวกันมันจะไม่มีจุดหมายที่จะทำcurl -X POST -d data [URL]...แต่คุณสามารถสร้างความสนุกสนานและคำขอค่อนข้างหายากที่ส่งคำขอร่างกายใน GET curl -X GET -d data [URL]ขอกับสิ่งที่ต้องการ

ขุดลึกลงไป

curl -GET(ใช้เส้นประเดียว) ผิดสำหรับวัตถุประสงค์นี้ นั่นคือเทียบเท่าระบุ-G, -Eและ-Tตัวเลือกและการที่จะทำบางสิ่งบางอย่างที่แตกต่างกันอย่างสิ้นเชิง

นอกจากนี้ยังมีตัวเลือก curl ที่เรียกว่า--getเพื่อไม่ให้เกิดความสับสนด้วยเช่นกัน เป็นรูปแบบยาวของ -G ซึ่งใช้ในการแปลงข้อมูลที่ระบุ-dเป็นคำขอ GET แทนการโพสต์

(ต่อมาฉันใช้คำตอบของตัวเองที่นี่เพื่อเติมคำถามที่พบบ่อยเกี่ยวกับ curl เพื่อให้ครอบคลุมสิ่งนี้ )

คำเตือน

curl เวอร์ชันใหม่จะแจ้งให้ผู้ใช้ทราบเกี่ยวกับการใช้ -X ที่ไม่จำเป็นและอาจเป็นอันตรายเมื่อเปิดใช้งานโหมด verbose ( -v) - เพื่อให้ผู้ใช้ทราบ อธิบายเพิ่มเติมและมีแรงจูงใจในโพสต์บล็อกนี้

-G แปลงเนื้อหา POST + เป็น GET + query

คุณสามารถขอให้ curl แปลงชุดของ-dตัวเลือกและแทนที่จะส่งไปในเนื้อความของคำขอด้วย POST ให้วางไว้ที่ส่วนท้ายของสตริงการสืบค้นของ URL และออก GET โดยใช้ `-G แบบนี้:

curl -d name=daniel -d grumpy=yes -G https://example.com/

5
-XGET อาจจะไม่มีการใช้งาน แต่จะทำให้ชัดเจน
mtyson

"โดยค่าเริ่มต้นคุณจะใช้ curl โดยไม่ได้บอกอย่างชัดเจนว่าจะใช้วิธีการร้องขอใดหากคุณส่งผ่าน HTTP URL เช่น curl example.comระบบจะใช้ GET หากคุณใช้ -d หรือ -F curl จะใช้ POST - ฉันจะทำให้ HEAD และ -T จะทำให้เป็น PUT " ทุกสิ่งที่คุณต้องรู้
Donato

4
Explicit ดีกว่าโดยนัยเมื่อใดก็ตามที่คุณมีตัวเลือก ล้มเหลวเร็วล้มเหลวเร็วลดอุบัติเหตุลดเวลาดีบัก ครั้งเดียวที่คุณมีข้ออ้างในการข้ามคือเมื่อพิมพ์ลงในบรรทัดคำสั่ง สคริปต์ใด ๆ ควรระบุ -XGET แม้ว่าจะไม่จำเป็นก็ตาม
แบ็คแกมมอน

1
@ แบ็คแกมมอนถ้าพวกเขาทำพวกเขากำลังทำผิด แต่แน่นอนพวกเขาทำได้
Daniel Stenberg

2

-X [วิธีการของคุณ]
X ช่วยให้คุณสามารถแทนที่ค่าเริ่มต้น 'Get'

** แก้ไขตัวพิมพ์เล็กxเป็นตัวพิมพ์ใหญ่X


2
นี่ไม่ได้พยายามที่จะตอบคำถามว่า“ การดำเนินการทั้งสองนี้แตกต่างกันอย่างไร”
Melebius

1

การใช้-X [WHATEVER]เพียงเปลี่ยนสตริงวิธีการร้องขอที่ใช้ในคำขอ HTTP สิ่งนี้เข้าใจง่ายขึ้นด้วยสองตัวอย่าง - หนึ่งมี-X [WHATEVER]และอีกหนึ่งไม่มี - และส่วนหัวคำขอ HTTP ที่เกี่ยวข้องสำหรับแต่ละตัวอย่าง:

# curl -XPANTS -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.224.86.126) port 80 (#0)
> PANTS / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*

# curl -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.33.50.167) port 80 (#0)
> GET / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.