10 основных wget команд, чтобы скачать сайт и не только
wget - это популярная утилита командной строки Unix / Linux для извлечения контента из интернета. Он бесплатный и предоставляет способ загрузки файлов из интернета через терминал. Команда wget поддерживает протоколы HTTPS, HTTP и FTP из коробки. Более того, вы также можете использовать HTTP прокси.
Как он поможет вам устранить неполадки?
Есть много способов.
Как системный администратор, большую часть времени вы будете работать с терминалом, а при устранении неполадок, связанных с веб-приложением, вы можете не захотеть проверять всю страницу, а только возможность подключения. Или вы захотите загрузить определенную страницу, чтобы проверить содержимое.
wget неинтерактивен, что означает, что вы можете запускать его в фоновом режиме, даже если вы вышли из системы. Может быть много случаев, когда вам необходимо отключиться от системы, даже когда вы извлекаете файлы из Интернета. В фоновом режиме, wget будет работать пока не закончит назначенную работу.
Он также может быть использован для получения всего сайта на ваших локальных компьютерах. Он может следовать ссылкам на страницах XHTML и HTML для создания локальной версии. Для этого wget должен загрузить страницу рекурсивно. Это очень полезно, поскольку вы можете использовать его для загрузки важных страниц или сайтов для просмотра в автономном режиме.
Если вы любитель Linux, советуем прочитать об 11 команд на Linux для работы в качестве системного администратора.
Давайте посмотрим wget в действии. Синтаксис wget приведен ниже.
wget [option] [URL]
1. Скачать веб-страницу
Попробуем скачать страницу. Например: stackoverflow.com
wget stackoverflow.com
Если соединение с интернетом установлено, он загрузит домашнюю страницу и покажет вывод, как показано ниже.
root@user:~# wget stackoverflow.com
URL transformed to HTTPS due to an HSTS policy
--2020-02-25 09:53:28-- https://stackoverflow.com/
Распознаётся stackoverflow.com (stackoverflow.com)… 151.101.129.69, 151.101.193.69, 151.101.1.69, ...
Подключение к stackoverflow.com (stackoverflow.com)|151.101.129.69|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 112371 (110K) [text/html]
Сохранение в: «index.html»
index.html 100%[===================>] 109,74K 408KB/s за 0,3s
2020-02-25 09:53:29 (408 KB/s) - «index.html» сохранён [112371/112371]
root@user:~#
2. Скачать несколько файлов
Удобно, когда вам нужно скачать несколько файлов одновременно. Это может дать вам представление об автоматизации загрузки файлов с помощью некоторых скриптов.
Попробуем скачать файлы Python 3.8.1 и 3.5.1.
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
Итак, как вы можете догадаться, синтаксис такой, как показано ниже.
wget URL1 URL2 URL3
Вы просто должны обеспечить пространство (пробел) между URL-адресами.
3. Ограничить скорость загрузки
Иногда бывает полезным когда вы хотите проверить, сколько времени занимает загрузка файла с другой пропускной способностью.
Используя параметр --limit-rate
, вы можете ограничить скорость загрузки.
Вот результат загрузки Nodejs.
root@user:~# wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
--2020-02-25 10:02:54-- https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
Распознаётся nodejs.org (nodejs.org)… 104.20.22.46, 104.20.23.46, 2606:4700:10::6814:162e, ...
Подключение к nodejs.org (nodejs.org)|104.20.22.46|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 14591852 (14M) [application/x-xz]
Сохранение в: «node-v12.16.1-linux-x64.tar.xz»
node-v12.16.1-linux 100%[===================>] 13,92M 3,78MB/s за 4,0s
2020-02-25 10:02:58 (3,46 MB/s) - «node-v12.16.1-linux-x64.tar.xz» сохранён [14591852/14591852]
Загрузка файлов объемом 13,92 МБ заняла 4 секунды. Теперь давайте попробуем ограничить скорость до 500 КБ.
root@user:~# wget --limit-rate=500k https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
--2020-02-25 10:04:45-- https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
Распознаётся nodejs.org (nodejs.org)… 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:172e, ...
Подключение к nodejs.org (nodejs.org)|104.20.23.46|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 14591852 (14M) [application/x-xz]
Сохранение в: «node-v12.16.1-linux-x64.tar.xz»
node-v12.16.1-linux 100%[===================>] 13,92M 522KB/s за 28s
2020-02-25 10:05:13 (503 KB/s) - «node-v12.16.1-linux-x64.tar.xz» сохранён [14591852/14591852]
Из-за уменьшение пропускной способности, скачивание файла заняло больше времени: 28 секунд. Представьте, ваши пользователи жалуются на медленную загрузку, и вы знаете, что их пропускная способность сети низкая. С помощью параметра --limit-rate
вы можете попытаться быстро смоделировать проблему.
4. Скачать в фоновом режиме
Загрузка больших файлов может занять много времени. Плюс если вы еще захотите ограничить скорость, как показано выше. Для того, чтобы долго не пялиться в терминал, в ожидании когда файлы загрузиться, можно проделать вес этот процесс в фоновом режиме.
Для этого вы можете использовать аргумент -b
для запуска wget в фоновом режиме.
root@user:~# wget -b https://slack.com
Работа продолжается в фоновом режиме, pid 2450.
Выходные данные будут записаны в «wget-log».
root@user:~#
5. Игнорировать ошибку сертификата
Это удобно, когда вам нужно проверить веб-приложения, которые не имеют надлежащего сертификата. По умолчанию wget выдаст ошибку, если сертификат недействителен.
root@user:~# wget https://expired.badssl.com/
--2020-02-25 10:16:29-- https://expired.badssl.com/
Распознаётся expired.badssl.com (expired.badssl.com)… 104.154.89.105
Подключение к expired.badssl.com (expired.badssl.com)|104.154.89.105|:443... соединение установлено.
ОШИБКА: невозможно проверить сертификат expired.badssl.com, выпущенный «CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB»:
Для запрошенного сертификата истёк срок действия.
Для небезопасного подключения к expired.badssl.com используйте параметр «--no-check-certificate».
Приведенный выше пример относится к URL-адресу, срок действия которого истек. Как вы можете видеть, он предложил использовать параметр --no-check-certificate
который будет игнорировать любую проверку сертификата.
root@user:~# wget https://untrusted-root.badssl.com/ --no-check-certificate
--2020-02-25 10:19:34-- https://untrusted-root.badssl.com/
Распознаётся untrusted-root.badssl.com (untrusted-root.badssl.com)… 104.154.89.105
Подключение к untrusted-root.badssl.com (untrusted-root.badssl.com)|104.154.89.105|:443... соединение установлено.
ПРЕДУПРЕЖДЕНИЕ: невозможно проверить сертификат untrusted-root.badssl.com, выпущенный «CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US»:
Обнаружен самостоятельно подписанный сертификат.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 600 [text/html]
Сохранение в: «index.html.1»
index.html.1 100%[===================>] 600 --.-KB/s за 0s
2020-02-25 10:19:35 (34,4 MB/s) - «index.html.1» сохранён [600/600]
Круто, не правда ли?
6. Заголовок ответа HTTP
Смотрите заголовок ответа HTTP любого сайта в терминале.
При использовании параметра -s
, wget также покажет http заголовок страницы.
root@user:~# wget https://github.com -S
--2020-02-25 10:27:09-- https://github.com/
Распознаётся github.com (github.com)… 140.82.118.4
Подключение к github.com (github.com)|140.82.118.4|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа…
HTTP/1.1 200 OK
Date: Tue, 25 Feb 2020 06:27:05 GMT
Content-Type: text/html; charset=utf-8
Server: GitHub.com
Status: 200 OK
Vary: X-PJAX, Accept-Encoding, Accept, X-Requested-With
ETag: W/"a31adc71563b164fd0d33424f6a05a27"
Cache-Control: max-age=0, private, must-revalidate
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
X-Frame-Options: deny
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Expect-CT: max-age=2592000, report-uri="https://api.github.com/_private/browser/errors"
Content-Security-Policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com customer-stories-feed.github.com spotlights-feed.github.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com
Age: 6
Set-Cookie: _gh_sess=BnblGIPpIaiUhFIE4iTylHACRtS6%2By%2FDzdThgfcpqE3Uo2wXp7QTJXCCEpka72yAS6phLFfzozbmADCKcSutvPZxSj8UHP3ikTTu%2F8Cd3QbCXYqUBiVPWmYQ0gwhRfolv4K40c05eYXlNqBXNeYFvR7wb%2BEWIDSOMVUm0O81nMLiZZgYFfetyBTYuuLhwNAXc0WcT6nh8WBqyCj5lkSADBSRwbQrUeVjghqPRX4FfGrjtgJ3yjHlyjMZZKMGR8F34m6VebuIKcibRXT9oqkzCQ%3D%3D--3YFWMiCZ4m03WsdT--TOfg%2Fx7gnExjYz1UOV7kPg%3D%3D; Path=/; HttpOnly; Secure
Set-Cookie: _octo=GH1.1.1883752978.1582612031; Path=/; Domain=github.com; Expires=Thu, 25 Feb 2021 06:27:11 GMT; Secure
Set-Cookie: logged_in=no; Path=/; Domain=github.com; Expires=Thu, 25 Feb 2021 06:27:11 GMT; HttpOnly; Secure
Accept-Ranges: bytes
Transfer-Encoding: chunked
X-GitHub-Request-Id: 0A3C:1C90:767DF5:B3C0FB:5E54BE3F
Длина: нет данных [text/html]
Сохранение в: «index.html.1»
index.html.1 [ <=> ] 132,35K 507KB/s за 0,3s
2020-02-25 10:27:10 (507 KB/s) - «index.html.1» сохранён [135526]
7. Манипулировать User-Agent
Может возникнуть ситуация, когда вы захотите подключить сайт с помощью пользовательского агента User-Agent. Это выполнимо, если после URL-адреса, указать параметр --user-agent
.
root@user:~# wget https://itgap.ru --user-agent="MyCustomUserAgent"
8. HTTP заголовоки
Когда приложение все еще находится в разработке, у вас может не быть правильного URL для его тестирования. Или, возможно, вы захотите протестировать отдельный экземпляр HTTP с использованием IP, но вам нужно предоставить заголовок хоста для правильной работы приложения. В этой ситуации используйте параметр --header
.
Давайте рассмотрим пример тестирования http://10.10.10.1 с заголовком узла как application.com
wget --header="Host: application.com" http://10.10.10.1
Вы можете вставить любой заголовок, который вам понадобится.
9. Подключение через прокси
Если вы работаете в среде DMZ, у вас может не быть доступа к интернет-сайтам. Но вы можете воспользоваться прокси для подключения.
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
Не забудьте обновить переменную $ PROXYHOST: PORT на актуальную.
10. Подключение с использованием определенного протокола TLS
Обычно я бы рекомендовал использовать OpenSSL для тестирования протокола TLS. Но вы также можете использовать wget.
wget --secure-protocol=TLSv1_2 https://example.com
Вышеуказанный пример заставит wget подключиться через TLS 1.2.
Заключение
Я надеюсь, что вышеизложенное дает вам представление о том, что вы можете сделать с wget.