วิธีการดาวน์โหลดไฟล์ด้วย wget ที่หน้าทำให้คุณรอการดาวน์โหลด?


32

ฉันพยายามดาวน์โหลดไฟล์จาก sourceforge โดยใช้ wget แต่อย่างที่เราทุกคนรู้ดีว่าเราต้องคลิกที่ปุ่มดาวน์โหลดแล้วรอให้มันดาวน์โหลดอัตโนมัติ คุณจะดาวน์โหลดไฟล์ประเภทนี้โดยใช้ wget ได้อย่างไร?

ฉันพยายามดาวน์โหลดสิ่งนี้: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

แต่การทำ wget บนลิงค์ url นั้นจะไม่ทำให้ฉันได้รับไฟล์เนื่องจากไฟล์นั้นโหลดโดยอัตโนมัติผ่านเบราว์เซอร์


3
การไปที่หน้านั้นในเว็บเบราว์เซอร์ควรแสดงรายการลิงก์โดยตรง - คุณสามารถใช้ wget กับมันได้หรือไม่
BriGuy

หากคุณต้องการรักษาชื่อที่แท้จริงของไฟล์ (แทนที่จะเป็น "ดาวน์โหลด") คุณเพียงแค่ต้องเรียกมันว่าwget --trust-server-names URL
Adam Katz

คำตอบ:


5

ฉันไม่แน่ใจว่าเวอร์ชันwgetหรือ OS ใดและพร็อกซีใด ๆ อยู่ระหว่างคุณและ sourceforge แต่wgetดาวน์โหลดไฟล์เมื่อฉันลบ "/ download" และปล่อยไว้ที่นามสกุลไฟล์

ฉันไม่ต้องการที่จะโพสต์หรือ pastebin เซสชั่นทั้งหมดของฉัน แต่ฉันได้รับ 302 แล้ว 200 รหัสสถานะก่อนที่จะเริ่มการถ่ายโอน จะเกิดอะไรขึ้นเมื่อคุณพยายามwget?

Resolving downloads.sourceforge.net... 216.34.181.59
Connecting to downloads.sourceforge.net|216.34.181.59|:80... connected.
HTTP request sent, awaiting response... 302 Found

[snipped for brevity]

HTTP request sent, awaiting response... 200 OK
Length: 13432789 (13M) [application/x-gzip]
Saving to: `download'

ข้อควรทราบ: บางครั้งหน้า "ดาวน์โหลด" คือรายการมิเรอร์และสคริปต์ที่ให้คุณหนึ่งในนั้นเมื่อความล่าช้าบางอย่างผ่านไป SourceForge เมื่อ 10 ปีก่อนทำสิ่งนี้
can-ned_food

47

ผมขอแนะนำให้ใช้การทำเช่นนี้แทนcurl wgetมันสามารถทำตามการเปลี่ยนเส้นทางโดยใช้สวิทช์-L, และ-J-O

curl -O -J -L http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

สลับคำจำกัดความ

-O/--remote-name
  Write output to a local file named like the remote file we get. 
  (Only the file part of the remote  file  is  used, the path is cut off.)

-L/--location
  (HTTP/HTTPS)  If  the  server  reports that the requested page has moved 
  to a different location (indicated with a Location: header and a 3XX 
  response code), this option will make curl redo the request on the new 
  place.  If  used together  with  -i/--include  or -I/--head, headers from 
  all requested pages will be shown. When authentication is used, curl only 
  sends its credentials to the initial host. If a redirect takes curl to a 
  different host, it  won't be  able  to  intercept  the  user+password. 
  See also --location-trusted on how to change this. You can limit the
  amount of redirects to follow by using the --max-redirs option.

-J/--remote-header-name
  (HTTP) This option tells the -O/--remote-name option to  use  the  
  server-specified  Content-Disposition  filename instead of extracting a 
  filename from the URL.

ดูรายละเอียดเพิ่มเติมในหน้า man curl


2
ไม่จำเป็นต้องใช้ curl wgetสามารถติดตามการเปลี่ยนเส้นทางได้ แต่จะไม่ทำเช่นนั้นเว้นแต่คุณจะเพิ่ม--max-redirectจากค่าเริ่มต้นซึ่งสำหรับเหตุผลด้านความปลอดภัยแน่นอนว่า 0
Anthon

wgetค่าเริ่มต้นของ 1.19.2 เป็น--max-redirect=20สิ่งที่ดีพอสำหรับการใช้งานส่วนใหญ่ ฉันไม่แน่ใจว่าเมื่อไหร่ที่เปลี่ยนไป…หรือทำไมจึงเป็นสิ่งจำเป็นสำหรับความปลอดภัย (แต่จำเป็นต้องเดา!) แต่ฉันเดาว่าโซลูชันที่ต้องการในปัจจุบันคือการติดตามการเปลี่ยนเส้นทางและต้องการ--trust-server-namesรักษาชื่อที่กำหนดโดยเป้าหมายการเปลี่ยนเส้นทางแทน " ดาวน์โหลด "หรือ" index.html? blah = barg "หรือสิ่งที่ URL ที่ระบุใช้
Adam Katz

ในกรณีที่ช่วยทุกคนนี่คือวิธีที่ฉันจำสวิตช์ที่ถูกต้อง คิดว่า Jennifer Lopez JLO curl -JLO http://www.example.com/file.ext
Carl

15

ในตัวwgetคุณอาจใช้--content-dispositionตัวเลือกที่มีประโยชน์สำหรับบางโปรแกรมดาวน์โหลดไฟล์ CGI ที่ใช้ส่วนหัว "เนื้อหา - การจัดการ" เพื่ออธิบายสิ่งที่ชื่อของไฟล์ที่ดาวน์โหลดควร

ในตัวอย่าง:

wget --user-agent=Mozilla --content-disposition -E -c http://example.com/

สำหรับการแก้ปัญหาที่ซับซ้อนมากขึ้น (เช่นต้องการการอนุญาต) ให้ใช้ไฟล์คุกกี้ ( --load-cookies file) เพื่อจำลองเซสชันของคุณ

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