การใช้ cURL เพื่อดาวน์โหลดไฟล์ระยะไกลจาก Command Line
สารบัญ:
- ดาวน์โหลดไฟล์ที่ตรงทั้งหมดด้วย curl -O
- การบันทึกไฟล์ระยะไกลด้วยชื่ออื่นด้วย curl -o
- การดาวน์โหลดไฟล์หลายไฟล์พร้อมกันด้วย curl
เครื่องมือบรรทัดคำสั่ง curl อันทรงพลังสามารถใช้เพื่อดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ระยะไกล ผู้ใช้บรรทัดคำสั่งที่รู้จักกันมานานทราบดีว่าสิ่งนี้มีประโยชน์สำหรับสถานการณ์ที่หลากหลาย แต่เพื่อให้ทุกอย่างง่ายขึ้น หลายคนจะพบว่าการดาวน์โหลดไฟล์ด้วย curl มักจะเป็นทางเลือกที่รวดเร็วกว่าการใช้เว็บเบราว์เซอร์หรือไคลเอนต์ FTP จากด้าน GUI ของ Mac OS X (หรือลินุกซ์)สิ่งนี้มีประโยชน์สำหรับสถานการณ์ในพื้นที่ แต่มีประโยชน์อย่างยิ่งหากคุณอยู่ในสถานการณ์ที่คุณต้องดาวน์โหลดบางอย่างไปยัง Mac ระยะไกลเมื่อเชื่อมต่อผ่าน SSH
สำหรับจุดประสงค์ของการฝึกปฏิบัตินี้ เราจะมุ่งเน้นไปที่การดาวน์โหลดไฟล์จากโปรโตคอล HTTP และ SFTP ที่พบโดยทั่วไปสองโปรโตคอลเป็นหลัก แม้ว่าควรสังเกตว่า cURL รองรับโปรโตคอลอื่นๆ อีกมากมาย แม้ว่า curl จะใช้งานง่าย แต่ขอแนะนำให้มีความรู้เรื่อง command line
ดาวน์โหลดไฟล์ที่ตรงทั้งหมดด้วย curl -O
การใช้แฟล็ก -O ตัวพิมพ์ใหญ่กับ curl จะดาวน์โหลดไฟล์จากเซิร์ฟเวอร์ระยะไกลโดยยังคงรักษาชื่อไฟล์ไว้ ไวยากรณ์พื้นฐานสำหรับการดำเนินการนี้มีดังต่อไปนี้:
curl -O
หมายความว่าหากไฟล์ URL ที่ระบุชื่อ “sample.zip” ไฟล์นั้นจะถูกดาวน์โหลดด้วยชื่อไฟล์ “sample.zip” และหากไฟล์นั้นมีชื่อที่ใหญ่โตและซับซ้อน เช่น “LongExampleFileNameForOSXDaily-v- 1-3-51-revision-515b12-readme.txt” บนเซิร์ฟเวอร์ระยะไกล มันจะบันทึกด้วยชื่อที่แน่นอนบนเครื่องโลคัล ชื่อไฟล์ที่ยาวขึ้นมักจะใช้แฟล็ก -o ดีกว่า -O ซึ่งเราจะกล่าวถึงในไม่ช้า
ผู้อ่านทั่วไปอาจจำได้ว่าเราใช้คำสั่ง curl -O เมื่ออธิบายวิธีแยกเนื้อหาเสียงจริงจากไฟล์สตรีมมิ่ง m3u
การเริ่มต้นการดาวน์โหลดด้วย curl จะแสดงเปอร์เซ็นต์ที่ถ่ายโอน เวลาที่ใช้ในการดาวน์โหลดและเวลาที่เหลือ และความเร็วในการถ่ายโอน
ภาพหน้าจอมีการนำเสนอที่ดีกว่าตัวอย่างที่วางด้านล่าง แต่จะมีลักษณะดังนี้:
% รวม % ได้รับ % Xferd ความเร็วเฉลี่ย เวลา เวลา เวลา ปัจจุบัน ดาวน์โหลด อัปโหลด รวมที่ใช้ไป ความเร็วที่เหลือ 100 10505 100 10505 0 0 79741 0 --:--:-- --:--:-- --:--:-- 142k
ด้วยความเร็วการถ่ายโอนที่แสดงให้คุณเปลี่ยนเส้นทางเอาต์พุตของ curl ไปที่ /dev/null และใช้เพื่อทดสอบความเร็วการเชื่อมต่ออินเทอร์เน็ต แต่คำสั่ง wget มีแถบการถ่ายโอนที่อ่านและติดตามได้ง่ายกว่า ดังนั้น wget จึงดีกว่า เหมาะกับงานนั้นๆ
การบันทึกไฟล์ระยะไกลด้วยชื่ออื่นด้วย curl -o
การใช้แฟล็ก -o ตัวพิมพ์เล็กจะอนุญาตให้คุณระบุชื่อไฟล์อื่นสำหรับไฟล์ที่ดาวน์โหลด ซึ่งแตกต่างจากการตั้งชื่อบนเซิร์ฟเวอร์ระยะไกล วิธีนี้จะเป็นประโยชน์ในการลดชื่อไฟล์ที่ยาวหรือเพียงแค่ติดป้ายกำกับเพื่อให้ค้นหาได้ง่ายขึ้นด้วยตัวคุณเอง ไวยากรณ์ทั่วไปจะเป็น:
curl -o
ตัวอย่างเช่น ถ้าคุณต้องการบันทึกไฟล์ iOS IPSW ที่คุณพบในรายการบนเซิร์ฟเวอร์ของ Apple โดยไม่มีชื่อเต็มยาว คุณสามารถใช้ต่อไปนี้:
curl -o iPhone5C-704.ipsw http://appldnld.apple.com/iOS7/031-1828.20131114.P3wE4/iPhone5, 3_7.0.4_11B554a_Restore.ipsw
การดำเนินการนี้จะดาวน์โหลดไฟล์ “iPhone5, 3_7.0.4_11B554a_Restore.ipsw” แต่ตั้งชื่อให้สั้นลงเป็น “iPhone5C-704.ipsw” ที่มีความหมายมากกว่า
หากคุณไม่ต้องการบันทึกไฟล์ไปยังไดเร็กทอรีการทำงานปัจจุบัน ให้ระบุเส้นทางเป็นส่วนหนึ่งของชื่อไฟล์ ดังนี้:
curl -o ~/Desktop/localexample.dmg http://url-to-file/example.dmg
การดาวน์โหลดไฟล์หลายไฟล์พร้อมกันด้วย curl
cURL สามารถดาวน์โหลดไฟล์หลายไฟล์พร้อมกันได้อย่างง่ายดาย สิ่งที่คุณต้องทำคือระบุมากกว่าหนึ่ง URL เช่น
curl -O
สำหรับไฟล์ที่มีชื่อต่างกัน หรือโฮสต์บนเซิร์ฟเวอร์อื่น หรือภายในเส้นทางไดเรกทอรีต่างกัน ให้ใช้ URL ที่สมบูรณ์ เช่น
curl -O http://ftp.gnu.org/gnu/Licenses/fdl-1.1.txt http://ftp.gnu.org/gnu/ ใบอนุญาต/lgpl-2.1.txt http://ftp.gnu.org/gnu/GNUinfo/Audio/index.txt
ในทางกลับกัน หากชื่อไฟล์ที่จะดาวน์โหลดใช้การตั้งชื่อที่เพิ่มขึ้น คุณสามารถใช้เครื่องหมายวงเล็บเพื่อระบุช่วงการดาวน์โหลด เช่น
curl -O http://ftp.gnu.org/gnu/Licenses/fd1-1.txt
การดำเนินการนี้จะดึงไฟล์ fdl-1.1.txt, fd1-1.2.txt และ fd1-1.3.txt ทั้งหมดพร้อมกันโดยไม่ต้องระบุ URL เฉพาะแต่ละรายการ แน่นอนว่าวิธีนี้ใช้ได้เฉพาะเมื่อไฟล์อยู่ในไดเร็กทอรีเดียวกันและในโดเมนเดียวกัน
รับรองความโค้ง
คุณยังสามารถผ่านการรับรองความถูกต้องด้วย cURL โดยใช้แฟล็ก -u:
curl -u user:pass -O ftp://remote_url/file-to-download.zip
โปรดจำไว้ว่าประวัติการทุบตีจะจัดเก็บรหัสผ่านเป็นข้อความล้วนเมื่อใช้ -u โดยระบุชื่อผู้ใช้และรหัสผ่าน ดังนั้นจึงไม่แนะนำสำหรับสถานการณ์ส่วนใหญ่ คุณสามารถแก้ไขได้โดยวางช่องว่างไว้ข้างหน้า 'curl'หากคุณไม่ได้ใช้สเปซบาร์นำหน้าคำสั่ง คุณอาจต้องการล้างประวัติคำสั่งหลังจากนั้นเพื่อความปลอดภัย
รองรับโปรโตคอล curl & การใช้งานนอกเหนือจาก HTTP & FTP
ดังที่ได้กล่าวไว้ก่อนหน้านี้ การใช้ cURL ไปไกลเกินกว่า HTTP และ FTP เนื่องจากรายการหน้าคู่มือ curl กล่าวถึงโปรโตคอลเพิ่มเติมในคำอธิบาย:
นอกจากนี้ คุณจะพบว่า curl ยังสามารถใช้กับคำขอ PUT และ POST, คุกกี้, พร็อกซี, อุโมงค์, ดาวน์โหลดต่อ และแม้แต่ดึงข้อมูลส่วนหัว HTTP หรือเปลี่ยนตัวแทนผู้ใช้ (ปลอมแปลงได้อย่างมีประสิทธิภาพ) โดยไม่ต้องใช้เว็บเบราเซอร์เฉพาะ
เช่นเดียวกับโปรแกรมอรรถประโยชน์บรรทัดคำสั่งส่วนใหญ่ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ curl ได้โดยการเรียก man page ที่เหมาะสมด้วยคำสั่ง 'man curl'