Bagaimana cara mengunduh file dengan wget di mana halaman itu membuat Anda menunggu unduhan?

32

Saya mencoba mengunduh file dari sourceforge menggunakan wget, tetapi seperti yang kita semua tahu, kita harus mengklik tombol unduh dan kemudian menunggu untuk mengunduh secara otomatis. bagaimana Anda mengunduh file jenis ini menggunakan wget?

Saya berusaha mengunduh ini: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

Tetapi melakukan wget pada tautan url itu tidak akan memberi saya file karena file tersebut dimuat secara otomatis melalui browser.

Patoshi パ ト シ
sumber
3
Pergi ke halaman itu di browser web juga harus membuat daftar Tautan Langsung - dapatkah Anda menggunakan wget dengan itu?
BriGuy
Jika Anda mencari untuk melestarikan nama sebenarnya dari file tersebut (daripada "mengunduh") maka Anda hanya perlu memanggilnya sebagaiwget --trust-server-names URL
Adam Katz

Jawaban:

5

Saya tidak yakin versi wgetatau OS dan proxy mana yang ada di antara Anda dan sourceforge tetapi wgetmengunduh file ketika saya menghapus "/ unduh" dan meninggalkannya di ekstensi file.

Saya tidak ingin membanjiri pos atau menempelkan seluruh sesi saya tapi saya mendapat 302 kode status kemudian 200 sebelum transfer dimulai. Apa yang terjadi ketika Anda mencoba 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'
Karen3819x4
sumber
Juga dari catatan: kadang-kadang halaman "unduh" adalah daftar mirror dan skrip yang memberi Anda salah satunya ketika penundaan tertentu telah berlalu. SourceForge 10 tahun lalu melakukan ini.
can-ned_food
47

Saya akan menyarankan menggunakan curluntuk melakukan ini, bukan wget. Hal ini dapat mengikuti pengalihan dengan menggunakan switch -L, -Jdan -O.

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

beralih definisi

-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.

Lihat halaman curl man untuk lebih jelasnya.

slm
sumber
2
Tidak perlu menggunakan ikal, wgetdapat mengikuti arahan ulang, tetapi tidak melakukannya kecuali Anda meningkatkan --max-redirectdari default, yang karena alasan keamanan tentu saja 0.
Anthon
wgetDefault 1.19.2 adalah --max-redirect=20yang harus cukup baik untuk sebagian besar penggunaan. Saya tidak yakin kapan itu berubah ... atau mengapa itu diperlukan untuk keamanan (rujukan?), Tetapi dugaan saya adalah bahwa solusi yang lebih disukai saat ini adalah mengikuti pengalihan dan alih-alih harus --trust-server-namesmempertahankan nama yang diberikan oleh target pengalihan alih-alih " unduh "atau" index.html? blah = barg "atau apa pun yang digunakan URL yang disediakan.
Adam Katz
Dalam hal ini membantu siapa pun, inilah cara saya mengingat saklar yang benar. Pikirkan Jennifer Lopez. JLO. curl -JLO http://www.example.com/file.ext
Carl
15

Dalam wgetAnda dapat menggunakan--content-disposition opsi yang berguna untuk beberapa program CGI berkas-download bahwa penggunaan "Content-Disposition" header untuk menggambarkan apa nama file yang didownload harus.

Sebagai contoh:

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

Untuk solusi yang lebih kompleks (seperti diperlukan otorisasi), gunakan file cookie ( --load-cookies file) untuk mensimulasikan sesi Anda.

kenorb
sumber