¿Cómo descargar archivos con wget donde la página te hace esperar para descargar?

32

Estoy tratando de descargar un archivo de sourceforge usando wget, pero como todos sabemos, tenemos que hacer clic en el botón de descarga y luego esperar a que se descargue automáticamente. ¿Cómo se descarga este tipo de archivo con wget?

Estoy tratando de descargar esto: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

Pero hacer un wget en ese enlace de URL no me daría el archivo ya que el archivo se carga automáticamente a través del navegador.

Patoshi パ ト シ
fuente
3
Ir a esa página en el navegador web también debería incluir un enlace directo. ¿Puedes usar wget con eso?
BriGuy
Si está buscando preservar el nombre verdadero del archivo (en lugar de "descargarlo") simplemente necesita invocarlo comowget --trust-server-names URL
Adam Katz

Respuestas:

5

No estoy seguro de qué versión wgeto sistema operativo y cualquier proxy existen entre usted y sourceforge, pero wgetdescargué el archivo cuando eliminé "/ download" y lo dejé en la extensión del archivo.

No quiero inundar la publicación o pegar toda mi sesión, pero obtuve los códigos de estado 302 y luego 200 antes de que comenzara la transferencia. ¿Qué pasa cuando lo intentas 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
fuente
También es de destacar: ocasionalmente, la página de "descarga" es una lista de espejos y un script que le proporciona uno de ellos cuando ha transcurrido un cierto retraso. SourceForge hace 10 años hizo esto.
can-ned_food
47

Sugeriría usar curlpara hacer esto en lugar de wget. Se puede seguir la redirección utilizando los interruptores -L, -Jy -O.

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

cambiar definiciones

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

Vea la página del manual de curl para más detalles.

slm
fuente
2
No es necesario usar curl, wgetpuede seguir redireccionamientos, pero no lo hace a menos que aumente --max-redirectel valor predeterminado, que por razones de seguridad es, por supuesto, 0.
Anthon
wgetEl valor predeterminado de 1.19.2 es --max-redirect=20que debería ser lo suficientemente bueno para la mayoría de los usos. No estoy seguro de cuándo cambió ... o por qué eso era necesario para la seguridad (¡cita requerida!), Pero supongo que la solución preferida actual era seguir las redirecciones y, en cambio, exigir --trust-server-namesque se mantenga el nombre proporcionado por un objetivo de redirección en lugar de " descargue "o" index.html? blah = barg "o lo que sea que use la URL proporcionada.
Adam Katz
En caso de que ayude a alguien, así es como recuerdo los interruptores correctos. Piensa en Jennifer Lopez. JLO curl -JLO http://www.example.com/file.ext
Carl
15

En wgetpuede usar --content-dispositionla opción de que es útil para algunos programas CGI de archivos a descargar de que el uso de cabeceras "Content-Disposition" para describir lo que debe ser el nombre de un archivo descargado.

Por ejemplo:

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

Para soluciones más complejas (como autorización requerida), use el archivo cookie ( --load-cookies file) para simular su sesión.

kenorb
fuente