Jak pobierać pliki za pomocą wget, gdzie strona każe czekać na pobranie?


32

Próbuję pobrać plik z sourceforge za pomocą wget, ale jak wszyscy wiemy, musimy kliknąć przycisk pobierania, a następnie poczekać, aż zostanie automatycznie pobrany. jak pobierasz ten typ pliku za pomocą wget?

Próbuję pobrać to: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

Ale zrobienie wgeta na tym linku url nie dałoby mi pliku, ponieważ plik jest automatycznie ładowany przez przeglądarkę.


3
Przejście do tej strony w przeglądarce internetowej powinno również zawierać link bezpośredni - czy możesz z tym korzystać z wget?
BriGuy

Jeśli chcesz zachować prawdziwą nazwę pliku (zamiast „download”), musisz po prostu wywołać go jakowget --trust-server-names URL
Adam Katz

Odpowiedzi:


5

Nie jestem pewien, która wersja systemu wgetoperacyjnego lub serwera proxy istnieje między tobą a sourceforge, ale pobrałem wgetplik, gdy usunąłem plik „/ download” i zostawiłem go przy rozszerzeniu.

Nie chcę zalewać wpisu ani wklejać całej mojej sesji, ale dostałem 302, a następnie 200 kodów stanu przed rozpoczęciem przesyłania. Co się stanie, gdy spróbujesz 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'

Uwaga: czasami strona „pobierania” to lista serwerów lustrzanych i skrypt, który daje jedno z nich po upływie określonego czasu. SourceForge 10 lat temu to zrobił.
can-ned_food

47

Sugerowałbym użycie curldo tego zamiast wget. Można ją śledzić na przekierowanie za pomocą przełączników -L, -Joraz -O.

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

zmienić definicje

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

Zobacz stronę curl, aby uzyskać więcej informacji.


2
Nie musisz używać curl, wgetmoże śledzić przekierowania, ale nie robi tego, chyba że zwiększysz --max-redirectdomyślną wartość, która ze względów bezpieczeństwa wynosi oczywiście 0.
Anthon

wgetDomyślna wersja 1.19.2 jest --max-redirect=20wystarczająca do większości zastosowań. Nie jestem pewien, kiedy to się zmieniło… ani dlaczego było to konieczne ze względów bezpieczeństwa (potrzebne cytowanie!), Ale domyślam się, że obecnie preferowanym rozwiązaniem było śledzenie przekierowań, a zamiast tego wymaganie --trust-server-nameszachowania nazwy podanej przez cel przekierowania zamiast „ download ”lub„ index.html? blah = barg ”lub jakikolwiek inny podany adres URL.
Adam Katz

Jeśli komuś to pomoże, oto jak pamiętam prawidłowe przełączniki. Pomyśl o Jennifer Lopez. JLO. curl -JLO http://www.example.com/file.ext
Carl

15

W wgetmożna użyć --content-dispositionopcji, która jest przydatna w przypadku niektórych programów CGI plikach pobierania nagłówków, że stosowanie „Content-Disposition”, aby opisać to, co nazwa pobranego pliku powinno być.

W przykładzie:

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

W przypadku bardziej złożonych rozwiązań (takich jak wymagana autoryzacja) użyj pliku cookie ( --load-cookies file), aby zasymulować sesję.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.