Як завантажити файли за допомогою 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 на цьому URL-посиланні не отримає мені файл, оскільки файл завантажується автоматично через браузер.


3
Перейшовши на цю сторінку у веб-браузері, слід також вказати пряме посилання - чи можете ви використовувати wget з цим?
BriGuy

Якщо ви хочете зберегти справжнє ім'я файлу (а не "завантажувати"), тоді вам потрібно просто викликати його якwget --trust-server-names URL
Адам Кац

Відповіді:


5

Я не впевнений, яка версія wgetОС або будь-якого проксі існує між вами та sourceforge, але wgetзавантажила файл, коли я видалила "/ завантажити" і залишила його в розширенні файлу.

Я не хочу затоплювати публікацію або вставляти весь свій сеанс, але я отримав 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'

Також зверніть увагу: періодично сторінка "завантаження" - це список дзеркал і сценарій, який дає вам одне з них, коли минула певна затримка. 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.

Докладніші відомості див. На сторінці чоловіка із завитками.


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 ( --load-cookies file) для імітації сеансу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.