Как скачать файлы с помощью wget, где страница заставляет вас ждать загрузки?

32

Я пытаюсь загрузить файл из sourceforge с помощью wget, но, как мы все знаем, мы должны нажать на кнопку загрузки, а затем дождаться ее автоматической загрузки. Как вы загружаете этот тип файла с помощью wget?

Я пытаюсь скачать это: http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.8.1/bitcoin-0.8.1-linux.tar.gz/download

Но выполнение wget по этой ссылке не даст мне файл, поскольку файл автоматически загружается через браузер.

Патоши パ ト シ
источник
3
Переход на эту страницу в веб-браузере также должен содержать прямую ссылку - можете ли вы использовать wget с этим?
BriGuy
Если вы хотите сохранить истинное имя файла (а не «загрузить»), вам просто нужно вызвать его какwget --trust-server-names URL
Адам Кац

Ответы:

5

Я не уверен, какая версия wgetили ОС и какой-либо прокси существует между вами и sourceforge, но wgetскачал файл, когда я удалил «/ download» и оставил его с расширением файла.

Я не хочу залить сообщение или вставить весь сеанс, но я получил 302, а затем 200 кодов состояния до начала передачи. Что происходит, когда вы пытаетесь 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
источник
Также обратите внимание: иногда страница «загрузки» представляет собой список зеркал и скрипт, который дает вам одно из них по истечении определенной задержки. SourceForge 10 лет назад сделал это.
can-ned_food
47

Я бы предложил использовать curlэто вместо wget. Он может следить за переадресацию с помощью переключателей -L, -Jи -O.

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

переключение определений

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

Смотрите man-страницу curl для более подробной информации.

SLM
источник
2
Не нужно использовать curl, он wgetможет следовать за перенаправлениями, но это не так, если вы не увеличите значение --max-redirectпо умолчанию, которое по соображениям безопасности, конечно, равно 0.
Anthon
wgetПо умолчанию 1.19.2 это то, --max-redirect=20что должно быть достаточно для большинства применений. Я не уверен, когда это изменилось ... или почему это было необходимо для обеспечения безопасности (необходима цитата!), Но я предполагаю, что текущим предпочтительным решением было следовать перенаправлениям и вместо этого требовать --trust-server-namesсохранения имени, предоставленного целью перенаправления, а не " скачать "или" index.html? blah = barg "или любой другой, который используется в указанном URL.
Адам Кац
На случай, если это кому-нибудь поможет, вот как я помню правильные переключатели. Подумайте, Дженнифер Лопес. JLO. curl -JLO http://www.example.com/file.ext
Карл
15

В wgetвы можете использовать --content-dispositionвариант , который является полезным для некоторых файловых загрузки программ CGI , которые используют заголовки «Content-Disposition» , чтобы описать то , что имя загруженного файла должно быть.

В примере:

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

Для более сложных решений (например, требуется авторизация) используйте cookie file ( --load-cookies file) для имитации вашего сеанса.

kenorb
источник