cURL กับ wget ใน Linux: อะไรคือความแตกต่าง?
เผยแพร่แล้ว: 2022-07-13
หากคุณถามผู้ใช้ Linux ว่าดาวน์โหลดไฟล์ด้วยอะไร บางคนจะบอกว่า wget
และคนอื่นๆ จะพูดว่า cURL
อะไรคือความแตกต่างและดีกว่าที่อื่น?
มันเริ่มต้นด้วยการเชื่อมต่อ
นักวิจัยของรัฐบาลเริ่มเชื่อมโยงเครือข่ายต่างๆ เข้าด้วยกันตั้งแต่ช่วงทศวรรษที่ 1960 ทำให้เกิดงานเครือ ข่าย ที่ เชื่อม ต่อถึงกัน แต่การกำเนิดของอินเทอร์เน็ตอย่างที่เราทราบนั้นเกิดขึ้นเมื่อวันที่ 1 มกราคม พ.ศ. 2526 เมื่อมีการใช้โปรโตคอล TCP/IP นี่คือลิงค์ที่ขาดหายไป อนุญาตให้คอมพิวเตอร์และเครือข่ายที่แตกต่างกันสามารถสื่อสารโดยใช้มาตรฐานร่วมกัน
ในปี 1991 CERN ได้เปิดตัวซอฟต์แวร์เวิลด์ไวด์เว็บซึ่งพวกเขาใช้ภายในองค์กรมาสองสามปีแล้ว ความสนใจในการซ้อนทับภาพนี้สำหรับอินเทอร์เน็ตเกิดขึ้นทันทีและแพร่หลาย เมื่อสิ้นสุดปี 1994 มีเว็บเซิร์ฟเวอร์ 10,000 เซิร์ฟเวอร์และผู้ใช้ 10 ล้านคน
เหตุการณ์สำคัญทั้งสองนี้—อินเทอร์เน็ตและเว็บ—แสดงถึงลักษณะการเชื่อมต่อที่แตกต่างกันมาก แต่ก็มีฟังก์ชันเหมือนกันหลายอย่างเช่นกัน
การเชื่อมต่อมีความหมายแค่นั้น คุณกำลังเชื่อมต่อกับอุปกรณ์ระยะไกลบางอย่าง เช่น เซิร์ฟเวอร์ และคุณกำลังเชื่อมต่อกับมันเพราะมีบางอย่างที่คุณต้องการหรือต้องการ แต่คุณจะดึงทรัพยากรที่โฮสต์จากระยะไกลนั้นไปยังคอมพิวเตอร์ในพื้นที่ของคุณจากบรรทัดคำสั่ง Linux ได้อย่างไร
ในปี พ.ศ. 2539 ยูทิลิตี้สองรายการถือกำเนิดขึ้นซึ่งอนุญาตให้คุณดาวน์โหลดทรัพยากรที่โฮสต์จากระยะไกล พวกเขาคือ wget
ซึ่งเปิดตัวในเดือนมกราคมและ cURL
ซึ่งเปิดตัวในเดือนธันวาคม ทั้งคู่ทำงานบนบรรทัดคำสั่ง Linux พวกเขาทั้งสองเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลและทั้งคู่ดึงข้อมูลให้คุณ
แต่นี่ไม่ใช่เพียงกรณีปกติของ Linux ที่มีเครื่องมือสองอย่างขึ้นไปเพื่อทำงานเดียวกัน ยูทิลิตี้เหล่านี้มีวัตถุประสงค์และความเชี่ยวชาญที่แตกต่างกัน ปัญหาคือ มันคล้ายกันมากจนทำให้เกิดความสับสนว่าควรใช้อันไหนและเมื่อใด
พิจารณาศัลยแพทย์สองคน คุณอาจไม่ต้องการให้ศัลยแพทย์ตาทำการผ่าตัดบายพาสหัวใจ และคุณไม่ต้องการให้ศัลยแพทย์หัวใจทำการผ่าตัดต้อกระจก ใช่ พวกเขาทั้งคู่เป็นผู้เชี่ยวชาญทางการแพทย์ที่มีทักษะสูง แต่นั่นไม่ได้หมายความว่าพวกเขาจะเข้ามาแทนที่กันและกัน
เช่นเดียวกันกับ wget
และ cURL
วัตถุประสงค์ต่างกัน คุณสมบัติต่างกัน บางส่วนทับซ้อนกัน
“w” ในคำสั่ง wget
เป็นตัวบ่งชี้ถึงจุดประสงค์ที่ตั้งใจไว้ จุดประสงค์หลักคือเพื่อดาวน์โหลดหน้าเว็บหรือแม้แต่เว็บไซต์ทั้งหมด หน้า man
อธิบายว่าเป็นเครื่องมือในการดาวน์โหลดไฟล์จากเว็บโดยใช้โปรโตคอล HTTP, HTTPS และ FTP
ในทางตรงกันข้าม cURL
ทำงานได้กับ 26 โปรโตคอล รวมถึง SCP, SFTP และ SMSB เช่นเดียวกับ HTTPS หน้า man
บอกว่าเป็นเครื่องมือสำหรับถ่ายโอนข้อมูล ไปยังหรือจาก เซิร์ฟเวอร์ ไม่เหมาะกับการทำงานกับเว็บไซต์โดยเฉพาะ มีขึ้นสำหรับการโต้ตอบกับเซิร์ฟเวอร์ระยะไกลโดยใช้โปรโตคอลอินเทอร์เน็ตใด ๆ ที่สนับสนุน
ดังนั้น wget
จึงเน้นที่เว็บไซต์เป็นหลัก ในขณะที่ cURL
เป็นสิ่งที่ทำงานในระดับที่ลึกกว่า ลงไปที่ระดับอินเทอร์เน็ตวานิลลาธรรมดา
wget
สามารถดึงข้อมูลหน้าเว็บ และสามารถนำทางโครงสร้างไดเร็กทอรีทั้งหมดบนเว็บเซิร์ฟเวอร์แบบเรียกซ้ำเพื่อดาวน์โหลดทั้งเว็บไซต์ นอกจากนี้ยังสามารถปรับลิงก์ในหน้าดึงข้อมูลเพื่อให้ชี้ไปที่หน้าเว็บในเครื่องคอมพิวเตอร์ของคุณได้อย่างถูกต้อง และไม่ชี้ไปที่คู่กันบนเว็บเซิร์ฟเวอร์ระยะไกล
cURL
ช่วยให้คุณโต้ตอบกับเซิร์ฟเวอร์ระยะไกล มันสามารถอัปโหลดไฟล์รวมทั้งดึงข้อมูลได้ cURL
ทำงานร่วมกับพร็อกซี SOCKS4 และ SOCKS5 และ HTTPS ไปยังพร็อกซี รองรับการคลายการบีบอัดไฟล์อัตโนมัติในรูปแบบ GZIP, BROTLI และ ZSTD cURL
ยังให้คุณดาวน์โหลดการถ่ายโอนหลายรายการพร้อมกัน
ความเหลื่อมล้ำระหว่างทั้งสองคือ wget
และ cURL
ช่วยให้คุณดึงหน้าเว็บและใช้เซิร์ฟเวอร์ FTP
เป็นเพียงเมตริกคร่าวๆ แต่คุณสามารถชื่นชมชุดคุณลักษณะที่เกี่ยวข้องของเครื่องมือทั้งสองได้โดยดูจากความยาวของหน้า man
ในเครื่องทดสอบของเรา man page สำหรับ wget
มีความยาว 1433 บรรทัด หน้า man
สำหรับ cURL
คือ 5296 บรรทัดมหันต์
ดูอย่างรวดเร็วที่ wget
เนื่องจาก wget
เป็นส่วนหนึ่งของโปรเจ็กต์ GNU คุณควรพบมันติดตั้งไว้ล่วงหน้าบนลีนุกซ์ทุกรุ่น การใช้งานนั้นง่าย โดยเฉพาะอย่างยิ่งสำหรับการใช้งานทั่วไป: การดาวน์โหลดหน้าเว็บหรือไฟล์

เพียงใช้คำสั่ง wget
กับ URL ไปยังหน้าเว็บหรือไฟล์ระยะไกล
wget https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc
ไฟล์จะถูกดึงและบันทึกลงในคอมพิวเตอร์ของคุณด้วยชื่อเดิม
หากต้องการบันทึกไฟล์ด้วยชื่อใหม่ ให้ใช้ตัวเลือก -O
(เอกสารส่งออก)
wget -O word-file-test.doc https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc
ไฟล์ที่ดึงมาจะถูกบันทึกด้วยชื่อที่เราเลือก
อย่าใช้ตัวเลือก -O
เมื่อคุณกำลังดึงข้อมูลเว็บไซต์ หากคุณทำเช่นนั้น ไฟล์ที่ดึงมาทั้งหมดจะถูกผนวกเข้ากับไฟล์เดียว
หากต้องการดึงข้อมูลทั้งเว็บไซต์ ให้ใช้ตัวเลือก -m
(กระจกเงา) และ URL ของหน้าแรกของเว็บไซต์ คุณจะต้องใช้ --page-requisites
เพื่อให้แน่ใจว่าดาวน์โหลดไฟล์สนับสนุนทั้งหมดที่จำเป็นสำหรับการแสดงผลหน้าเว็บอย่างถูกต้องด้วย ตัวเลือก --convert-links
จะปรับลิงก์ในไฟล์ที่ดึงมาเพื่อชี้ไปยังปลายทางที่ถูกต้องในเครื่องคอมพิวเตอร์ของคุณ แทนที่จะเป็นตำแหน่งภายนอกบนเว็บไซต์
ที่เกี่ยวข้อง: วิธีใช้ wget เครื่องมือดาวน์โหลดบรรทัดคำสั่งขั้นสูง
ดูอย่างรวดเร็วที่cURL
cURL
เป็นโครงการโอเพ่นซอร์สอิสระ มีการติดตั้งล่วงหน้าบน Manjaro 21 และ Fedora 36 แต่ต้องติดตั้งบน Ubuntu 21.04
นี่คือคำสั่งสำหรับติดตั้ง cURL บน Ubuntu
sudo apt ติดตั้ง curl
ในการดาวน์โหลดไฟล์เดียวกันกับที่เราทำกับ wget
และบันทึกด้วยชื่อเดียวกัน เราจำเป็นต้องใช้คำสั่งนี้ โปรดทราบว่าตัวเลือก -o
(เอาต์พุต) เป็นตัวพิมพ์เล็กที่มี cURL
curl -o word-file-test.doc https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc
ไฟล์ถูกดาวน์โหลดมาให้เรา แถบความคืบหน้า ASCII จะแสดงขึ้นระหว่างการดาวน์โหลด
ในการเชื่อมต่อกับเซิร์ฟเวอร์ FTP และดาวน์โหลดไฟล์ ให้ใช้ตัวเลือก -u
(ผู้ใช้) และระบุคู่ชื่อผู้ใช้และรหัสผ่านดังนี้:
curl -o test.png -u demo:password ftp://test.rebex.net/pub/example/KeyGenerator.png
ดาวน์โหลดและเปลี่ยนชื่อไฟล์จากเซิร์ฟเวอร์ FTP ทดสอบ
ที่เกี่ยวข้อง: วิธีใช้ curl เพื่อดาวน์โหลดไฟล์จาก Linux Command Line
ไม่มีสิ่งที่ดีที่สุด
เป็นไปไม่ได้ที่จะตอบว่า “ฉันควรใช้อันไหน” โดยไม่ถามว่า “คุณกำลังพยายามทำอะไรอยู่”
เมื่อคุณเข้าใจแล้วว่า wget
และ cURL
ทำอะไร คุณจะรู้ว่ามันไม่ได้อยู่ในการแข่งขัน ไม่เป็นไปตามข้อกำหนดเดียวกันและไม่ได้พยายามให้ฟังก์ชันการทำงานเหมือนกัน
การดาวน์โหลดหน้าเว็บและเว็บไซต์เป็นที่ที่ wget
เหนือกว่าอยู่ หากนั่นคือสิ่งที่คุณกำลังทำอยู่ ให้ใช้ wget
สำหรับสิ่งอื่น เช่น การอัปโหลด หรือใช้โปรโตคอลอื่นๆ จำนวนมาก ให้ใช้ cURL