Знайомимося на практиці з wget - популярною утилітою командного рядка * nix-систем для вилучення вмісту з інтернету.
Що таке wget?
Wget - вільна утиліта, що надає неінтерактивний спосіб завантаження файлів з інтернету по HTTPS , HTTP, FTP і навіть HTTP-проксі.
Ви можете запустити 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 комментариев
Добавить комментарий