ไลบรารี 'libcurl'
(everything.curl.dev)การใช้ --libcurl
- แนะนำให้ใช้ libcurl: แนะนำให้ผู้ใช้ลองใช้เครื่องมือบรรทัดคำสั่ง curl เพื่อทดสอบการรับส่งข้อมูลที่ต้องการก่อน และเมื่อทำงานได้ใกล้เคียงตามต้องการแล้ว ให้รันอีกครั้งโดยเพิ่มตัวเลือก
--libcurl [ชื่อไฟล์]ในบรรทัดคำสั่ง - การสร้างโค้ด: ตัวเลือกบรรทัดคำสั่ง
--libcurlจะสร้างโปรแกรมภาษา C โดยใช้ชื่อไฟล์ที่ระบุ โปรแกรม C นี้จะใช้ libcurl เพื่อทำการรับส่งข้อมูลแบบเดียวกับที่เครื่องมือบรรทัดคำสั่ง curl ได้ทำไว้ - ข้อยกเว้นและความแตกต่าง: แม้จะไม่ตรงกันแบบ 100% เสมอไป แต่ก็สามารถให้แรงบันดาลใจที่ยอดเยี่ยมเกี่ยวกับตัวเลือก libcurl และอาร์กิวเมนต์เพิ่มเติมที่ต้องการใช้งาน
โค้ดตัวอย่าง
- ตัวอย่างการรัน: เมื่อรันคำสั่ง
curl http://example.com --libcurl example.cจะมีการสร้างไฟล์example.cขึ้นในไดเรกทอรีปัจจุบัน - โค้ดที่สร้างขึ้น: โค้ดที่สร้างขึ้นจะมีการตั้งค่าตัวเลือกต่าง ๆ ด้วย
curl_easy_setopt()และบางตัวเลือกอาจสร้างออกมาเป็นซอร์สได้ไม่ง่ายนัก ทำให้ผู้ใช้ต้องนำไปเขียนเองหรือเลือกที่จะไม่ใช้
ความเห็นของ GN⁺
- ประโยชน์ของ libcurl: ฟีเจอร์นี้ช่วยให้นักพัฒนาสามารถแปลงคำสั่ง curl ที่ทำงานได้บนบรรทัดคำสั่งให้เป็นโปรแกรมภาษา C ได้อย่างง่ายดาย จึงช่วยเร่งการพัฒนาแอปพลิเคชันที่ใช้ libcurl
- ข้อดีของการสร้างโค้ด: โค้ดที่สร้างขึ้นโดยอัตโนมัติสามารถช่วยให้นักพัฒนาเข้าใจและนำ libcurl API ไปใช้ได้รวดเร็วยิ่งขึ้น
- คุณค่าในฐานะเครื่องมือการเรียนรู้: อาจเป็นสื่อการเรียนรู้ที่ดีสำหรับวิศวกรซอฟต์แวร์ระดับเริ่มต้น โดยช่วยให้เห็นตัวอย่างการใช้ตัวเลือกของ libcurl และการประยุกต์ใช้จริงของการเขียนโปรแกรมเครือข่าย
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
รูปแบบการใช้งานที่ดีมากคือ หา request ที่ต้องการในแท็บ Network ของเครื่องมือสำหรับนักพัฒนาในเบราว์เซอร์ แล้วคัดลอกด้วย “copy as curl” จากนั้นใช้เครื่องมืออย่าง https://curlconverter.com/ แปลงเป็นโค้ด request ของภาษาที่ใช้อยู่
ในแง่หนึ่ง curl ถูกใช้เหมือน intermediate representation ที่แปลต่อไปเป็นอะไรก็ได้
curl_translateในแพ็กเกจ httr2 ซึ่งเป็นการเขียน httr ใหม่เมื่อไม่นานมานี้https://httr2.r-lib.org/reference/curl_translate.html
“copy as curl” ของเบราว์เซอร์จะดึง header ด้านการยืนยันตัวตนและ encoding มาในสถานะที่ทำงานได้แน่นอน จึงสะดวกกว่าการมานั่งปรับคำสั่ง curl หลายบรรทัดเองมาก
จะเปลี่ยน request parameter แล้วยิงไปยัง local instance ก็ได้ หรือ pipe เข้า
jqเพื่อจัดรูปแบบ output ก็ได้เพราะถูกใช้กว้างขวางมาก จึงมีทั้งเครื่องมือที่ export request ออกมาเป็น cURL และเครื่องมือที่ import cURL เข้าไป
การที่ command-line interface มี flag สำหรับพ่น source code ของโปรแกรม ที่ทำงานเหมือนคำสั่งปัจจุบันออกมาได้นั้นค่อนข้างเจ๋ง
ให้ความรู้สึกเหมือนเปิดฝากระโปรงดูว่าข้างในเกิดอะไรขึ้น ไม่เพียงช่วยให้เข้าใจการทำงานดีขึ้น แต่ยังทำให้แก้ไขหรือขยายให้ตรงกับความต้องการได้ง่ายขึ้นด้วย
ถ้าใช้
libcurlแล้วต้องการอย่าง range request หรือถ้าใช้ “copy as curl” จากแท็บ Network ของเบราว์เซอร์ ก็สามารถรันบน command line แล้วเติม--libcurlเพื่อดูได้เลยว่าถ้าทำด้วย C library ต้องทำอย่างไรแบบเป๊ะ ๆวิธีแบบนี้เป็นหนึ่งในเหตุผลที่ มาโคร Visual Basic ของ Microsoft Office ประสบความสำเร็จ
ผู้ใช้สามารถทำ action ใน Word หรือ Excel ดู macro ที่สร้างขึ้น แล้วแก้โค้ดให้ตรงกับความต้องการได้ เป็นแนวคิดที่เรียบง่ายแต่ทรงพลัง จึงดีใจที่ได้เห็นใน curl ด้วย
ดูเหมือนไม่ได้อัปเดตมานานแล้ว: https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5
นึกถึง AREXX ของ Amiga ด้วย
หากจะคอมไพล์ ต้องบอกให้
gccรู้ว่าจะ ลิงก์ libcurl เช่นใส่-lcurlตัวอย่างเช่น ใช้
curl https://ifconfig.me --libcurl ip_fetcher.cเพื่อสร้างที่อยู่ IP และip_fetcher.cจากนั้นคอมไพล์ด้วยgcc -o ip_fetcher ip_fetcher.c -lcurlแล้วรัน./ip_fetcherก็จะแสดงที่อยู่ IPสำหรับคนที่ไม่ได้เขียน C ทุกวัน ขั้นตอนการลิงก์พื้นฐานแบบนี้ก็เป็นข้อมูลที่มีประโยชน์
makeมากกว่าพิมพ์คำสั่งccเอง ก็มีวิธีที่ง่ายกว่าหลัง
curl https://ifconfig.me --libcurl ip_fetcher.cให้รันmake LDFLAGS=-lcurl ip_fetcherแล้วตามด้วย./ip_fetcherขอโปรโมตเล็กน้อย Hurl เป็นโอเพนซอร์ส CLI ที่ใช้ libcurl เพื่อรันและทดสอบ HTTP request ในรูปแบบ plain text
มันใช้ความน่าเชื่อถือสูงของ libcurl และฟีเจอร์อย่าง HTTP/3 พร้อมเพิ่มความสามารถ เช่น เชื่อม request ต่อกัน, จับข้อมูลจาก response แล้วส่งต่อไปยัง request ถัดไป, และทดสอบ response ด้วย JSONPath/XPath
มี syntax sugar สำหรับ request ของ REST/SOAP/GraphQL API ด้วย แต่แกนหลักก็เป็น libcurl ล้วน ๆ และถ้าใช้ verbose option ก็ grep คำสั่ง curl ได้ ผมมีส่วนร่วมในฐานะ maintainer
https://hurl.dev
ถ้าฟีเจอร์แบบนี้ทำได้ใน ffmpeg ก็คงดี
Daniel Stenberg ใส่ใจรายละเอียดและประสบการณ์ของนักพัฒนา/ผู้ใช้อย่างพิถีพิถันจริง ๆ
การขัดเกลาได้ถึงระดับนี้น่าทึ่งมาก
จำได้ว่า Daniel Stenberg เคยพูดถึง option นี้ใน วิดีโอความยาว 3 ชั่วโมง ที่ไล่ดู option ส่วนใหญ่ของ command line curl
https://www.youtube.com/watch?v=V5vZWHP-RqU
ชื่อเรื่องที่ส่งควรเป็น ขีดกลางสองตัว (
--) ไม่ใช่การผสมระหว่าง em dash แบบเต็มความกว้างกับ hyphen (—-)นี่หมายความว่า option นี้สร้าง โปรแกรม C ที่คอมไพล์ได้ ซึ่งใช้แทนสคริปต์ที่ wrap การเรียก curl เดิมได้หรือเปล่า?
libcurlก็ทำได้อยู่แล้ว แต่ที่ผ่านมาต้องเขียน boilerplate code เองควรมองว่าเป็นจุดเริ่มต้นที่ช่วยไม่ให้ต้องค้นเอกสารอยู่นานหลายชั่วโมง