Comment télécharger des fichiers avec wget où la page vous fait attendre le téléchargement?

32

J'essaie de télécharger un fichier depuis sourceforge en utilisant wget, mais comme nous le savons tous, nous devons cliquer sur le bouton de téléchargement et attendre qu'il se télécharge automatiquement. comment télécharger ce type de fichier en utilisant wget?

J'essaie de télécharger ceci: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

Mais faire un wget sur ce lien URL ne me permettrait pas d'obtenir le fichier car le fichier est automatiquement chargé via le navigateur.

Patoshi パ ト シ
la source
3
Aller à cette page dans le navigateur Web devrait également répertorier un lien direct - pouvez-vous utiliser wget avec cela?
BriGuy
Si vous cherchez à conserver le vrai nom du fichier (plutôt que "télécharger"), il vous suffit de l'invoquer en tant quewget --trust-server-names URL
Adam Katz

Réponses:

5

Je ne suis pas sûr de la version wgetou du système d'exploitation et de tout proxy existant entre vous et sourceforge, mais wgetj'ai téléchargé le fichier lorsque j'ai supprimé le "/ téléchargement" et l'ai laissé à l'extension de fichier.

Je ne veux pas inonder le message ou coller toute ma session, mais j'ai reçu les codes d'état 302 puis 200 avant le début du transfert. Que se passe-t-il lorsque vous essayez 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
la source
À noter également: la page de téléchargement est parfois une liste de miroirs et un script qui vous en donne un lorsqu'un certain délai s'est écoulé. Il y a 10 ans, SourceForge l'a fait.
can-ned_food
47

Je suggère d'utiliser curlpour faire cela au lieu de wget. Il peut suivre la redirection à l' aide des commutateurs -L, -Jet -O.

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

définitions de commutateur

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

Consultez la page de manuel curl pour plus de détails.

slm
la source
2
Pas besoin d'utiliser curl, wgetpeut suivre les redirections, mais il ne le fait que si vous augmentez --max-redirectla valeur par défaut, ce qui pour des raisons de sécurité est bien sûr 0.
Anthon
wgetLa valeur par défaut de 1.19.2 est celle --max-redirect=20qui devrait être suffisante pour la plupart des utilisations. Je ne sais pas quand cela a changé… ni pourquoi cela était nécessaire pour la sécurité (citation nécessaire!), Mais je suppose que la solution préférée actuelle était de suivre les redirections et de demander --trust-server-namesà la place de conserver le nom fourni par une cible de redirection plutôt que " télécharger "ou" index.html? blah = barg "ou quoi que l'URL fournie utilise.
Adam Katz
Au cas où cela aiderait quelqu'un, voici comment je me souviens des bons commutateurs. Pensez à Jennifer Lopez. JLO. curl -JLO http://www.example.com/file.ext
Carl
15

En wgetvous pouvez utiliser l' --content-dispositionoption qui est utile pour certains programmes CGI fichiers-téléchargement qui utilisent des en- têtes « Content-Disposition » pour décrire ce que le nom d'un fichier téléchargé doit être.

Par exemple:

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

Pour des solutions plus complexes (comme une autorisation requise), utilisez le fichier cookie ( --load-cookies file) pour simuler votre session.

Kenorb
la source