10 прикладів використання wget

  • 25 марта, 10:01
  • 3810
  • 0

Знайомимося на практиці з wget - популярною утилітою командного рядка * nix-систем для вилучення вмісту з інтернету.

Що таке wget?

Wget - вільна утиліта, що надає неінтерактивний спосіб завантаження файлів з інтернету по HTTPS , HTTP, FTP і навіть HTTP-проксі.

10 прикладів використання wget

Ви можете запустити wget у фоновому режимі, а він доробить всю призначену роботу. Зазвичай утиліту використовують для отримання всього веб-сайту, переходу по посиланнях на сторінках XHTML / HTML і створення локальної версії сайту. Синтаксис wget виглядає так:

wget [option] [URL]

1. Завантаження сторінки

Спробуємо завантажити сторінку github.com:

wget github.com

Якщо все підключилося, то wget завантажить домашню сторінку і покаже результат, як показано нижче:

wget github.com
URL transformed to HTTPS due to an HSTS policy
--2020-02-23 10:45:52--  https://github.com/
Resolving github.com (github.com)... 140.82.118.3
Connecting to github.com (github.com)|140.82.118.3|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html                                [ <=>] 131.96K  --.-KB/s    in 0.04s

2020-02-23 10:45:52 (2.89 MB/s) - ‘index.html’ saved [135126]

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

Не забувайте про пробіл між посиланнями!

3. Обмеження швидкості завантаження

Обмежити швидкість завантаження корисно, коли стоїть завдання перевірити, скільки часу займає завантаження файлу на різній пропускній здатності.

Використовуючи опцію -- limit-rate, ви можете обмежити швидкість завантаження.

Ось результат завантаження файлу Node.js :       

wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
--2020-02-23 10:59:58--  https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ...
Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14591852 (14M) [application/x-xz]
Saving to: ‘node-v12.16.1-linux-x64.tar.xz’

node-v12.16.1-linux-x64.tar.xz   100%[===========================================================================================>]  13.92M  --.-KB/s    in 0.05s

2020-02-23 10:59:58 (272 MB/s) - ‘node-v12.16.1-linux-x64.tar.xz’ saved [14591852/14591852]

Знадобилося 0.05 с, щоб завантажити 13.92 Мб. Тепер спробуємо обмежити швидкість до 500 Кб / с:     

wget --limit-rate=500k https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
--2020-02-23 11:00:18--  https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ...
Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14591852 (14M) [application/x-xz]
Saving to: ‘node-v12.16.1-linux-x64.tar.xz.1’


node-v12.16.1-linux-x64.tar.xz.1  100%[===========================================================================================>]  13.92M   501KB/s    in 28s

2020-02-23 11:00:46 (500 KB/s) - ‘node-v12.16.1-linux-x64.tar.xz.1’ saved [14591852/14591852]

Швидкість завантаження впала до 28 с. Уявіть собі ситуацію - користувачі скаржаться на повільне завантаження. Ви можете швидко погратися з limit-rate для імітації проблеми.

4. Завантаження в фоновому режимі

Завантаження великих файлів може зайняти деякий час, але що якщо ви не хочете дивитися в термінал?

Можна використовувати ключ -b, щоб запустити wget у фоновому режимі:

wget -b https://slack.com
Continuing in background, pid 25430.
Output will be written to ‘wget-log.1’.

5. Ігнорування помилки сертифіката

Ігнорування помилки сертифіката зручно, коли вам потрібно звернутися до вузла у зовнішній мережі без відповідного сертифіката. Якщо сертифікат не є дійсним, за замовчуванням wget видасть помилку.

wget https://expired.badssl.com/
--2020-02-23 11:24:59--  https://expired.badssl.com/
Resolving expired.badssl.com (expired.badssl.com)... 104.154.89.105
Connecting to expired.badssl.com (expired.badssl.com)|104.154.89.105|:443... connected.
ERROR: cannot verify expired.badssl.com's certificate, issued by ‘CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB’:
  Issued certificate has expired.
To connect to expired.badssl.com insecurely, use `--no-check-certificate'.

На прикладі вище результат вичерпаного терміну дії сертифіката. Пропонується використовувати --no-check-certificate для ігнорування будь-якої перевірки сертифіката. Порівняємо результат з доданим ключем:

wget https://untrusted-root.badssl.com/ --no-check-certificate
--2020-02-23 11:33:45--  https://untrusted-root.badssl.com/
Resolving untrusted-root.badssl.com (untrusted-root.badssl.com)... 104.154.89.105
Connecting to untrusted-root.badssl.com (untrusted-root.badssl.com)|104.154.89.105|:443... connected.
WARNING: cannot verify untrusted-root.badssl.com's certificate, issued by ‘CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US’:
  Self-signed certificate encountered.
HTTP request sent, awaiting response... 200 OK
Length: 600 [text/html]
Saving to: ‘index.html.6’

index.html.6   100%[===========================================================================================>]     600  --.-KB/s    in 0s

2020-02-23 11:33:45 (122 MB/s) - ‘index.html.6’ saved [600/600]

6. Заголовок HTTP відповіді

За допомогою ключа -S в термінал буде виведений заголовок, як це сталося з Coursera  :

root@trends:~# wget https://www.coursera.org -S
--2020-02-23 11:47:01--  https://www.coursera.org/
Resolving www.coursera.org (www.coursera.org)... 13.224.241.48, 13.224.241.124, 13.224.241.82, ...
Connecting to www.coursera.org (www.coursera.org)|13.224.241.48|:443... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Content-Type: text/html
  Content-Length: 511551
  Connection: keep-alive
  Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
  Date: Sun, 23 Feb 2020 11:47:01 GMT
  etag: W/"7156d-WcZHnHFl4b4aDOL4ZSrXP0iBX3o"
  Server: envoy
  Set-Cookie: CSRF3-Token=1583322421.s1b4QL6OXSUGHnRI; Max-Age=864000; Expires=Wed, 04 Mar 2020 11:47:02 GMT; Path=/; Domain=.coursera.org
  Set-Cookie: __204u=9205355775-1582458421174; Max-Age=31536000; Expires=Mon, 22 Feb 2021 11:47:02 GMT; Path=/; Domain=.coursera.org
  Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  X-Content-Type-Options: nosniff
  x-coursera-render-mode: html
  x-coursera-render-version: v2
  X-Coursera-Request-Id: NCnPPlYyEeqfcxIHPk5Gqw
  X-Coursera-Trace-Id-Hex: a5ef7028d77ae8f8
  x-envoy-upstream-service-time: 1090
  X-Frame-Options: SAMEORIGIN
  x-powered-by: Express
  X-XSS-Protection: 1; mode=block
  X-Cache: Miss from cloudfront
  Via: 1.1 884d101a3faeefd4fb32a5d2a8a076b7.cloudfront.net (CloudFront)
  X-Amz-Cf-Pop: LHR62-C3
  X-Amz-Cf-Id: vqvX6ZUQgtZAde62t7qjafIAqHXQ8BLAv8UhkPHwyTMpvH617yeIbQ==
Length: 511551 (500K) [text/html]

7. Маніпуляції з User-Agent

Буває так, що ми хочемо відкрити сайт за допомогою іншого user-agent. Це можна зробити, вказавши ключ --user-agent:           

wget https://gf.dev --user-agent="MyCustomUserAgent"

8. Заголовок хоста

Коли додаток знаходиться в розробці і є необхідність щось потестить, але немає відповідної URL-адреси або ми хочемо протестувати домен з використанням 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.

Джерело перекладу


0 комментариев
Сортировка:
Добавить комментарий