В данной статье я хочу поговорить о установке и использовании консольной утилиты GNU Wget в операционной системе Windows.
Возможности Wget не ограничиваются одной лишь загрузкой архивов, утилита умеет создавать локальные копии web-сайтов с полным сохранением структуры каталогов и файлов. Помимо этого возможна конвертация сохраненных html-файлов для просмотра сайта в автономном режиме. Считывая заголовки файлов и сравнивая их с ранее загруженными файлами, Wget может загружать новые версии файлов, благодаря чему можно создавать обновляемые зеркала сайтов.
Wget может работать по протоколам HTTP, HTTPS, FTP, а также поддерживает работу через HTTP-прокси сервера. Утилита разрабатывалась для медленных соединений, точнее в те времена соединения были медленными и нестабильными, поэтому она поддерживает докачку файлов при обрыве соединения. Если сервер с которого загружался файл тоже поддерживает докачку, то Wget продолжит загружать файл именно с того места, где оборвалась загрузка.
Для того чтобы установить Wget, перейдите по ссылке и скачайте установочный exe-файл. Запустите exe-файл и установите Wget как обычную программу, по умолчанию утилита устанавливается C:\Program Files (x86)\GnuWin32.
Для запуска утилиты нужна командная строка Windows, запускаем ее через меню пуск или сочетанием клавиш Win+R, в открывшемся окне ввести "cmd" и нажать Enter. После запуска командной строки сразу пользоваться Wget, как это происходит в ОС Linux, не получится, сначала нужно указать местоположение файла wget.exe.
Файл wget.exe находится в каталоге bin, внутри установочной директории. Для указания файла используется команда path.
path C:\Program Files (x86)\GnuWin32\bin
Теперь можно запустить Wget, для начала можно просмотреть вывод команды help со списком дополнительных опций.
wget -h
Список дополнительных опций утилиты Wget под спойлером.
Вывод wget -h
GNU Wget 1.11.4, программа для загрузки файлов из сети в автономном режиме.
Использование: wget [ОПЦИЯ]... [URL]...
Обязательные аргументы для длинных опций также являются обязательными и для коро
тких опций.
Запуск:
-V, --version вывод версии Wget и выход.
-h, --help вывод этой справки.
-b, --background после запуска перейти в фоновый режим.
-e, --execute=КОМАНДА выполнить команду в стиле `.wgetrc'.-
Журналирование и входной файл:
-o, --output-file=ФАЙЛ записывать сообщения в ФАЙЛ.
-a, --append-output=ФАЙЛ дописывать сообщения в конец ФАЙЛА.
-d, --debug вывод большого количества отладочной информации.
-q, --quiet молча (без выходных данных).
-v, --verbose подробный вывод (по умолчанию).
-nv, --no-verbose отключение подробного режима, но не полностью.
-i, --input-file=ФАЙЛ загрузка URL'ов, найденных в ФАЙЛЕ.
-F, --force-html считать, что входной файл - HTML.
-B, --base=URL добавление URL в начало относительных ссылок в файл
е -F -i.
Загрузка:
-t, --tries=ЧИСЛО установить ЧИСЛО повторных попыток (0 без огран
ичения).
--retry-connrefused повторять, даже если в подключении отказано.
-O, --output-document=ФАЙЛ записывать документы в ФАЙЛ.
-nc, --no-clobber пропускать загрузки, которые приведут к
загрузке уже существующих файлов.
-c, --continue возобновить загрузку частично загруженного файл
а.
--progress=ТИП выбрать тип индикатора выполнения.
-N, --timestamping не загружать повторно файлы, только если они
не новее, чем локальные.
-S, --server-response вывод ответа сервера.
--spider ничего не загружать.
-T, --timeout=СЕКУНДЫ установка значений всех тайм-аутов в СЕКУНДЫ.
--dns-timeout=СЕК установка тайм-аута поиска в DNS в СЕК.
--connect-timeout=СЕК установка тайм-аута подключения в СЕК.
--read-timeout=СЕК установка тайм-аута чтения в СЕК.
-w, --wait=СЕКУНДЫ пауза в СЕКУНДАХ между загрузками.
--waitretry=СЕКУНДЫ пауза в 1..СЕКУНДЫ между повторными попытками з
агрузки.
--random-wait пауза в 0...2*WAIT секунд между загрузками.
--no-proxy явно выключить прокси.
-Q, --quota=ЧИСЛО установить величину квоты загрузки в ЧИСЛО.
--bind-address=АДРЕС привязка к АДРЕСУ (имя хоста или IP) локального
хоста.
--limit-rate=СКОРОСТЬ ограничение СКОРОСТИ загрузки.
--no-dns-cache отключение кэширования поисковых DNS-запросов.
--restrict-file-names=ОС ограничение на символы в именах файлов, использ
ование которых допускает ОС.
--ignore-case игнорировать регистр при сопоставлении
файлов и/или каталогов.
-4, --inet4-only подключаться только к адресам IPv4.
-6, --inet6-only подключаться только к адресам IPv6.
--prefer-family=СЕМЕЙСТВО подключаться сначала к адресам указанного семей
ства,
может быть IPv6, IPv4 или ничего.
--user=ПОЛЬЗОВАТЕЛЬ установить и ftp- и http-пользователя в ПОЛЬЗОВ
АТЕЛЬ.
--password=ПАРОЛЬ установить и ftp- и http-пароль в ПАРОЛЬ.
Каталоги:
-nd, --no-directories не создавать каталоги.
-x, --force-directories принудительно создавать каталоги.
-nH, --no-host-directories не создавать каталоги как на хосте.
--protocol-directories использовать имя протокола в каталогах.
-P, --directory-prefix=ПРЕФИКС сохранять файлы в ПРЕФИКС/...
--cut-dirs=ЧИСЛО игнорировать ЧИСЛО компонентов удалённого ката
лога.
Опции HTTP:
--http-user=ПОЛЬЗОВАТЕЛЬ установить http-пользователя в ПОЛЬЗОВАТЕЛЬ.
--http-password=ПАРОЛЬ установить http-пароль в ПАРОЛЬ.
--no-cache отвергать кэшированные сервером данные.
-E, --html-extension сохранять HTML-документы с расширением `.html'.
--ignore-length игнорировать поле заголовка `Content-Length'.
--header=СТРОКА вставить СТРОКУ между заголовками.
--max-redirect максимально допустимое число перенаправлений
на страницу.
--proxy-user=ПОЛЬЗОВАТЕЛЬ установить ПОЛЬЗОВАТЕЛЯ в качестве имени пользо
вателя для прокси.
--proxy-password=ПАРОЛЬ установить ПАРОЛЬ в качестве пароля для прокси.
--referer=URL включить в HTTP-запрос заголовок `Referer: URL'.
--save-headers сохранять HTTP-заголовки в файл.
-U, --user-agent=АГЕНТ идентифицировать себя как АГЕНТ вместо Wget/ВЕРСИ
Я.
--no-http-keep-alive отключить поддержание активности HTTP (постоянные
подключения).
--no-cookies не использовать кукисы.
--load-cookies=ФАЙЛ загрузить кукисы из ФАЙЛА перед сеансом.
--save-cookies=ФАЙЛ сохранить кукисы в ФАЙЛ после сеанса.
--keep-session-cookies загрузить и сохранить кукисы сеанса (непостоянные
).
--post-data=СТРОКА использовать метод POST; отправка СТРОКИ в качест
ве данных.
--post-file=ФАЙЛ использовать метод POST; отправка содержимого ФАЙ
ЛА.
--content-disposition Учитывать заголовок Content-Disposition
при выборе имён для локальных файлов
(ЭКСПЕРИМЕНТАЛЬНЫЙ).
--auth-no-challenge Отправить базовые данные аутентификации HTTP
не дожидаясь ответа от сервера.
Опции HTTPS (SSL/TLS):
--secure-protocol=ПР выбор безопасного протокола: auto, SSLv2,
SSLv3 или TLSv1.
--no-check-certificate не проверять сертификат сервера.
--certificate=FILE файл сертификата пользователя.
--certificate-type=ТИП тип сертификата пользователя: PEM или DER.
--private-key=ФАЙЛ файл секретного ключа.
--private-key-type=ТИП тип секретного ключа: PEM или DER.
--ca-certificate=ФАЙЛ файл с набором CA.
--ca-directory=КАТ каталог, в котором хранится список CA.
--random-file=ФАЙЛ файл со случайными данными для SSL PRNG.
--egd-file=ФАЙЛ файл, определяющий сокет EGD со случайными данны
ми.
Опции FTP:
--ftp-user=ПОЛЬЗОВАТЕЛЬ установить ftp-пользователя в ПОЛЬЗОВАТЕЛЬ.
--ftp-password=ПАРОЛЬ установить ftp-пароль в ПАРОЛЬ.
--no-remove-listing не удалять файлы файлы `.listing'.
--no-glob выключить маски для имён файлов FTP.
--no-passive-ftp отключить "пассивный" режим передачи.
--retr-symlinks при рекурсии загружать файлы по ссылкам (не катал
оги).
--preserve-permissions сохранять права доступа удалённых файлов.
Рекурсивная загрузка:
-r, --recursive включение рекурсивной загрузки.
-l, --level=ЧИСЛО глубина рекурсии (inf и 0 - бесконечность).
--delete-after удалять локальные файлы после загрузки.
-k, --convert-links делать ссылки локальными в загруженном HTML.
-K, --backup-converted перед преобразованием файла X делать резервную копию
X.orig.
-m, --mirror короткая опция, эквивалентная
-N -r -l inf --no-remove-listing.
-p, --page-requisites загрузить все изображения и проч., необходимые для о
тображения HTML-страницы.
--strict-comments включить строгую (SGML) обработку комментариев HTML.
Разрешения/запреты при рекурсии:
-A, --accept=СПИСОК список разрешённых расширений, разделённых за
пятыми.
-R, --reject=СПИСОК список запрещённых расширений, разделённых за
пятыми.
-D, --domains=СПИСОК список разрешённых доменов, разделённых запят
ыми.
--exclude-domains=СПИСОК список запрещённых доменов, разделённых запят
ыми.
--follow-ftp следовать по ссылкам FTP в HTML-документах.
--follow-tags=СПИСОК список используемых тегов HTML, разделённых з
апятыми.
--ignore-tags=СПИСОК список игнорируемых тегов HTML, разделённых з
апятыми.
-H, --span-hosts заходить на чужие хосты при рекурсии.
-L, --relative следовать только по относительным ссылкам.
-I, --include-directories=СПИСОК список разрешённых каталогов.
-X, --exclude-directories=СПИСОК список исключаемых каталогов.
-np, --no-parent не подниматься в родительский каталог.
Обычные копирование и вставка (Ctrl+C, Ctrl+V) в командной строке Windows не работают. Чтобы скопировать текст из командной строки Windows, нужно просто выделить нужный фрагмент текста и нажать Enter.
Для вставки текста в командную строку, нужно кликнуть правой кнопкой мыши по окну командной строки, выбрать подменю "Изменить" и дальше выполнить требуемую команду. Копирование и вставка существенно облегчают работу с командной строкой Windows.
Давайте рассмотрим несколько примеров использования утилиты Wget.
Допустим что нам нужно скачать какой нибудь файл, пусть это будет титульное изображение для этой статьи. Для этого нужно просто указать URL (ссылку) нужного файла, например так.
wget https://techlist.top/wp-content/uploads/2017/05/wget.jpg
Иногда Wget может ругаться на "самоподписанные сертификаты" при использовании HTTPS-ссылок, хотя с самими сертификатами все в порядке, в таком случае нужно использовать дополнительную опцию "--no-check-certificate".
wget https://techlist.top/wp-content/uploads/2017/05/wget.jpg --no-check-certificate
При обычном вызове командной строки Windows сохранение файла будет происходить в пользовательский каталог C:\Users\Username. Если файл требуется сохранить в какой-либо определенный каталог, то его необходимо указать при помощи дополнительного ключа "-P", пусть это будет каталог test на диске C (C:\test).
wget -P C:\test https://techlist.top/wp-content/uploads/2017/05/wget.jpg --no-check-certificate
Если файл должен быть сохранен в определенном каталоге, то существует более простой способ сохранения файла, без указания дополнительных опций. Зайдите в нужный каталог через проводник Windows, зажмите клавишу Shift и кликните по области каталога правой кнопкой мыши, в открывшемся меню выберите "Открыть окно команд".
Открывшаяся командная строка станет выглядеть следующим образом.

Выполните команду path, для указания местоположения wget.exe.
path C:\Program Files (x86)\GnuWin32\bin
Теперь все будет сохраняться именно в эту папку.
Давайте представим что у нас есть некий файл со списком ссылок, которые необходимо скачать. Пусть это будет файл test.txt расположенный в пользовательском каталоге C:\Users\Username, со следующим содержанием.
https://techlist.top/wp-content/uploads/2017/03/nginx_.jpg
https://techlist.top/wp-content/uploads/2017/04/wp.jpg
https://techlist.top/wp-content/uploads/2017/01/php7.jpg
https://techlist.top/wp-content/uploads/2017/03/MariaDB.jpg
https://techlist.top/wp-content/uploads/2016/09/netfilter-logo.jpg
Дополнительный ключ "-i" будет указывать на расположение файла - C:\Users\Username\test.txt и все файлы из списка будут сохранены.
wget -i C:\Users\Username\test.txt --no-check-certificate
Чтобы скачать сайт целиком достаточно просто указать его адрес c минимально необходимым набором опций, например.
wget -r -l 10 -k -p -t 5 https://techlist.top --no-check-certificate
-r, --recursive включение рекурсивной загрузки.
-l, --level=ЧИСЛО глубина рекурсии (inf и 0 - бесконечность).
-k, --convert-links делать ссылки локальными в загруженном HTML.
-p, --page-requisites загрузить все изображения и проч.,
необходимые для отображения HTML-страницы.
-t, --tries=ЧИСЛО установить ЧИСЛО повторных попыток (0 без ограничения).
В результате получим готовое зеркало сайта, которое будет автономно работать на компьютере, благодаря конвертации ссылок для локального использования сайта.
Но допустим что нам не нужен весь сайт, а только вот эта статья https://techlist.top/install-wordpress/. В таком случае команда для загрузки станет выглядеть так.
wget -r -l 10 -t 5 -k -p -np https://techlist.top/install-wordpress/ --no-check-certificate
Добавляем к предыдущей команде доп. опцию -np
-np, --no-parent не подниматься в родительский каталог
в нашем случае выше указанной директории https://techlist.top/install-wordpress/ скачивание не пойдет.
Комбинируя набор доп. опций в командах Wget можно добиться разных результатов. Так что пробуйте все самостоятельно и изучайте возможности утилиты.