ดาวน์โหลดไฟล์ ZIP ด้วยคำสั่ง curl


33

ฉันจะดาวน์โหลดไฟล์ ZIP ด้วยคำสั่ง curl ได้อย่างไร ฉันพยายามcurl -sOแต่เกิดข้อผิดพลาด ฉันต้องการดาวน์โหลดไฟล์ zip จากที่อยู่: http://github.com/ziyaddin/xampp/archive/master.zip

แต่ทำไม่ได้ ฉันต้องพิมพ์อะไร


ข้อความแสดงข้อผิดพลาดคืออะไร
David Foerster

คำตอบ:



20

ลอง wget แทนการขด: wget http://github.com/ziyaddin/xampp/archive/master.zip


1
ผู้ลงคะแนนสามารถอธิบายได้หรือไม่ หรือเป็นโปสเตอร์อื่น ๆ ?
don.joey

4
คุณสามารถอธิบายได้ว่าทำไมwgetแทนcurl?
Jorge Bucaran

1
บรรทัดคำสั่งน้อยลง (ถ้าคุณสนใจ) - ซึ่งหมายถึงตัวเลือกที่น้อยกว่า แต่ความแตกต่างที่ใหญ่ที่สุดคือการสนับสนุนการดาวน์โหลดแบบเรียกซ้ำ
Ran Davidovitz

ไม่ทราบสาเหตุ แต่ฉันมีข้อผิดพลาดในการออกunzipไฟล์ที่ดาวน์โหลดด้วยcurlและทำงานได้ดีกับwget
Dinei

15

คุณสามารถใช้ได้:

curl https://github.com/ziyaddin/xampp/archive/master.zip -O -J -L

บันทึกเป็น: xampp-cli-master.zip

  • ใช้-Lในกรณีที่พบการเปลี่ยนเส้นทาง
  • ใช้-Oสำหรับชื่อไฟล์ระยะไกล ( master.zip)
  • ใช้-J(ใช้กับ-O) เพื่ออนุญาตให้ใช้ชื่อไฟล์ส่วนหัวระยะไกล ( xampp-cli-master.zip)


หรือใช้-oเพื่อสร้างชื่อไฟล์ของคุณเอง:

curl https://github.com/ziyaddin/xampp/archive/master.zip -L -o MyFilename.zip

บันทึกเป็น: MyFilename.zip

หมายเหตุ: (GitHub รองรับ SSL - ใช้https://)


คุณสามารถใช้curlrc ไฟล์กำหนดค่าหรือนามแฝงคำสั่ง CURL เพื่อใช้curl -O -Lเพื่ออนุญาตให้มันทำงานคล้ายกับ WGET

ดู: https://curl.haxx.se/docs/manpage.html#OPTIONS (ดู: -O , -J , -L , -o )

สังเกตคำเตือนของการใช้ CURL ด้วยตัวเลือก -J:

ไม่มีความพยายามในการถอดรหัส% -sequences (ยัง) ในชื่อไฟล์ที่ให้ไว้ดังนั้นตัวเลือกนี้อาจให้ชื่อไฟล์ที่ไม่คาดคิดแก่คุณ

คำเตือน : ใช้ตัวเลือกนี้อย่างรอบคอบโดยเฉพาะบน Windows เซิร์ฟเวอร์โกงสามารถส่งชื่อ DLL หรือไฟล์อื่น ๆ ที่สามารถโหลดโดยอัตโนมัติโดย Windows หรือซอฟต์แวร์บุคคลที่สาม


5

หากคุณต้องการดาวน์โหลดไฟล์ใช้wget [option]... [URL]...แทน

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกเพียงพิมพ์ลงในเทอร์มินัลของคุณ: man wget

เพื่อจุดประสงค์ของคุณ:

wget http://github.com/ziyaddin/xampp/archive/master.zip

โปรดทราบว่าไฟล์. zip จะถูกบันทึกไว้ในไดเรกทอรีปัจจุบันที่คุณอยู่


1
มันจะเป็นประโยชน์ที่จะอธิบายถึงข้อดีของการใช้ในช่วงของwget curlสำหรับทุกคนที่สงสัยว่าความแตกต่างระหว่างทั้งสองดูที่นี่
Jorge Bucaran

@ JorgeBucaran ฉันอ่านการเปรียบเทียบที่เขียนโดยผู้เขียนcurlที่มีส่วนช่วยwgetในบทบาทเล็กน้อย การละเลยการจ้องมองหนึ่งครั้ง (ตามโครงการขนาดเล็กครั้งเดียวของฉัน) คือการที่ wget เร็วกว่าขด 10 เท่า (<2 วินาทีกับ 12 วินาที) ดึงเวลาพระอาทิตย์ขึ้นและพระอาทิตย์ตกจากhttps://www.timeanddate.com
WinEunuuchs2Unix

ดังนั้นบางครั้งเมื่อคุณใช้ wget และไฟล์ไม่ได้ให้บริการโดยตรง แต่ url จะบอกบริการที่จะค้นหาและให้บริการไฟล์แทนสิ่งที่คุณต้องดาวน์โหลดคือ html ดังนั้น curl จะดีกว่าสำหรับบางไฟล์แทน
Zloy Smiertniy

3

ในการดาวน์โหลดไฟล์ใน GitHub (หรือไซต์อื่น ๆ ที่เปลี่ยนเส้นทาง) โดยใช้curlคุณจะต้องผ่าน-L(ติดตามการเปลี่ยนเส้นทาง) ดังนั้นให้ใช้:

curl -L http://github.com/ziyaddin/xampp/archive/master.zip -o xampp.zip


1

"curl -LOk" ทำให้ใช้โปรโตคอลที่ไม่ปลอดภัย (-k) ปิดใช้งานการตรวจสอบใบรับรอง SSL (ซึ่งล้มเหลวเนื่องจากเส้นทางที่ไม่ถูกต้องไม่ตรงกับใบรับรอง) และสร้างไฟล์เอาต์พุตโดยใช้ชื่อไฟล์ (-O) ที่เสนอจากเซิร์ฟเวอร์ระยะไกล (ยังไม่ปลอดภัย) ในความคิดของฉันเซิร์ฟเวอร์ควรได้รับการกำหนดค่าให้สร้างนามแฝงการเปลี่ยนเส้นทางในท้องถิ่นเมื่อจำเป็นเพื่อหลีกเลี่ยงการผ่านส่วนที่ไม่สอดคล้องกันของ URL แต่การเปลี่ยนเส้นทางนั้นทำโดยใช้การเปลี่ยนเส้นทาง HTTP เท่านั้น (ข้อผิดพลาด HTTP 30x) ซึ่งทำให้เกิดปัญหาในการม้วนงที่ไม่ปฏิบัติตาม (โดยค่าเริ่มต้น) การเปลี่ยนเส้นทาง (ไม่ปลอดภัย) นี้และตัวเลือก (-k) ปิดใช้งานการตรวจสอบความปลอดภัยนี้ ดังนั้นแทนที่จะใช้การเปลี่ยนเส้นทาง HTTP (ย้ายอย่างถาวร) โปรดเพิ่มลิงก์ภายในบนระบบไฟล์ของเซิร์ฟเวอร์ หากจำเป็นต้องใช้เพราะ URL นั้นโฮสต์จริงบนเซิร์ฟเวอร์จริงอื่นที่ไม่มีการเข้าถึงโดยตรงระหว่างระบบไฟล์ของพวกเขาคุณควรใช้ชื่อ DNS อื่นสำหรับโฮสต์นี้เพื่อให้ลูกค้าจะสอบถามที่ถูกต้องโดยตรงโดยไม่ต้องเปลี่ยนเส้นทางใด ๆ จากนั้นแก้ไขหน้าเว็บของคุณ (คุณสามารถใช้บันทึกการใช้เว็บเซิร์ฟเวอร์ของคุณเพื่อดูว่ามีการส่งคืนการเปลี่ยนเส้นทาง HTTP 30x ที่ไหนและอาจต้องตรวจสอบและอัปเดตหน้าเว็บใด) การบังคับให้ไคลเอ็นต์ใช้โปรโตคอลที่ไม่ปลอดภัย / ไม่ถูกตรวจสอบนั้นไม่ใช่ตัวเลือกที่ดี

ดังนั้นนี่เป็นปัญหาของการกำหนดค่าที่แย่มากบนเว็บเซิร์ฟเวอร์: ลองติดต่อผู้ดูแลระบบเพื่อแก้ไข


0

คุณสามารถใช้Axel ได้เช่นกัน Axel เป็นตัวเร่งความเร็วในการดาวน์โหลดบรรทัดคำสั่ง มันรองรับHTTP, HTTPS, FTPและFTPSโปรโตคอล มันเป็นทางเลือกที่ดีและเร็วขึ้น

ติดตั้งaxelโดยใช้:

apt-get install axel

จากนั้นดาวน์โหลดไฟล์ของคุณโดย:

axel http://github.com/ziyaddin/xampp/archive/master.zip

0

ใช้ตัวเลือก-Lเพื่อติดตามการเปลี่ยนเส้นทางคุณสามารถใช้--outputตัวเลือกเพื่อกำหนดเส้นทางและชื่อให้กับไฟล์ zip ตัวอย่างเช่น:

sudo curl -L https://github.com/CISOfy/lynis/archive/master.zip --output /etc/lynis.zip

หมายเหตุ: ใช้ sudo หากคุณไม่มีสิทธิ์เขียนไปยังโฟลเดอร์เป้าหมาย

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