Come scaricare file con wget dove la pagina ti fa aspettare per il download?


32

Sto cercando di scaricare un file da sourceforge usando wget, ma come tutti sappiamo dobbiamo fare clic sul pulsante di download e quindi attendere che si scarichi automaticamente. come scarichi questo tipo di file usando wget?

Sto cercando di scaricare questo: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

Ma fare una scommessa su quel link URL non mi procurerebbe il file poiché il file viene caricato automaticamente tramite il browser.


3
Andare a quella pagina nel browser Web dovrebbe anche elencare un collegamento diretto - puoi usare wget con quello?
BriGuy

Se stai cercando di preservare il vero nome del file (anziché "scaricare"), devi semplicemente invocarlo comewget --trust-server-names URL
Adam Katz,

Risposte:


5

Non sono sicuro di quale versione di wgeto sistema operativo e di qualsiasi proxy esista tra te e sourceforge ma wgetho scaricato il file quando ho rimosso "/ download" e l'ho lasciato sull'estensione del file.

Non voglio inondare il post o incollare la mia intera sessione, ma ho ricevuto i 302 e quindi i 200 codici di stato prima dell'inizio del trasferimento. Cosa succede quando ci provi 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'

Nota anche: a volte la pagina di "download" è un elenco di mirror e uno script che ti fornisce uno di essi quando è trascorso un certo ritardo. SourceForge 10 anni fa ha fatto questo.
can-ned_food

47

Suggerirei di usare curlper fare questo invece di wget. Si può seguire il reindirizzamento utilizzando gli interruttori -L, -Je -O.

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

cambia definizioni

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

Vedi la pagina man curl per maggiori dettagli.


2
Non è necessario usare l'arricciatura, wgetpuò seguire i reindirizzamenti, ma non lo fa a meno che non aumenti --max-redirectil valore predefinito, che per motivi di sicurezza è ovviamente 0.
Anthon

wgetIl valore predefinito di 1.19.2 è --max-redirect=20che dovrebbe essere abbastanza buono per la maggior parte degli usi. Non sono sicuro quando sia cambiato ... o perché fosse necessario per la sicurezza (citazione necessaria!), Ma la mia ipotesi è che l'attuale soluzione preferita fosse seguire i reindirizzamenti e invece richiedere --trust-server-namesdi conservare il nome fornito da un target di reindirizzamento piuttosto che " download "o" index.html? blah = barg "o qualunque sia l'URL fornito.
Adam Katz,

Nel caso in cui aiuti qualcuno, ecco come ricordo gli interruttori corretti. Pensa a Jennifer Lopez. JLO. curl -JLO http://www.example.com/file.ext
Carl

15

In wgetpuoi usare l' --content-dispositionopzione che è utile per alcuni programmi CGI per il download di file che usano le intestazioni "Content-Disposition" per descrivere quale dovrebbe essere il nome di un file scaricato.

Per esempio:

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

Per soluzioni più complesse (come l'autorizzazione richiesta), utilizzare il file cookie ( --load-cookies file) per simulare la sessione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.