Un instrument frecvent utilizat de administratorii de sisteme este `wget`. Acesta se dovedește extrem de valoros în procesul de depanare a problemelor legate de web.
Ce reprezintă comanda `wget`?
Comanda `wget` este un utilitar popular, bazat pe linia de comandă, specific sistemelor Unix/Linux, folosit pentru a descărca conținut de pe web. Disponibil gratuit, oferă o modalitate non-interactivă de a transfera fișiere de pe internet. `wget` suportă protocoalele HTTPS, HTTP și FTP. În plus, permite utilizarea proxy-urilor HTTP.
Cum ajută `wget` în depanare?
Modalitățile sunt diverse.
Ca administrator de sistem, adesea veți lucra într-un terminal. Când investigați probleme legate de aplicațiile web, este posibil să nu doriți să accesați întreaga pagină, ci doar să verificați conectivitatea sau să accesați site-uri intranet. Sau poate doriți să descărcați o anumită pagină pentru a inspecta conținutul.
Fiind un instrument non-interactiv, `wget` poate rula în fundal, chiar și atunci când sunteți deconectat. În anumite situații, este vital să vă deconectați de la sistem în timp ce transferați fișiere de pe web. `wget` va continua să ruleze și să finalizeze sarcinile atribuite.
De asemenea, `wget` poate fi folosit pentru a descărca un site web complet pe computerele locale. Urmărind legăturile din paginile XHTML și HTML, poate crea o versiune locală, prin descărcarea recursivă a paginii. Acest lucru este deosebit de util pentru a salva pagini sau site-uri importante pentru a fi vizualizate offline.
Să vedem cum funcționează. Sintaxa comenzii `wget` este următoarea:
wget [opțiune] [URL]
Descărcarea unei pagini web
Să încercăm să descărcăm o pagină, de exemplu, github.com:
wget github.com
Dacă conexiunea este bună, comanda va descărca pagina principală și va afișa un rezultat similar cu cel de mai jos:
[email protected]:~# 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] [email protected]:~#
Descărcarea simultană a mai multor fișiere
Este util atunci când trebuie să descărcați mai multe fișiere în același timp. Vă poate oferi o idee despre cum să automatizați descărcarea fișierelor prin intermediul scripturilor.
Să încercăm să descărcăm fișierele Python 3.8.1 și 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
După cum ați ghicit, sintaxa este următoarea:
wget URL1 URL2 URL3
Asigurați-vă că adăugați spații între URL-uri.
Limitarea vitezei de descărcare
Această opțiune este utilă atunci când doriți să testați timpul de descărcare a unui fișier la diferite lățimi de bandă.
Folosind opțiunea `–limit-rate`, puteți controla viteza de descărcare.
Iată rezultatul descărcării unui fișier Nodejs:
[email protected]:~# 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]
A durat 0,05 secunde pentru descărcarea a 13,92 MB. Acum, să limităm viteza la 500K:
[email protected]:~# 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]
Limitarea lățimii de bandă a prelungit timpul de descărcare la 28 de secunde. Imaginați-vă că utilizatorii se plâng de descărcări lente, iar dvs. știți că lățimea de bandă a rețelei lor este redusă. Puteți simula rapid problema folosind `–limit-rate`.
Descărcarea în fundal
Descărcarea fișierelor mari poate dura mult timp sau, ca în exemplul anterior, când doriți să setați și limita de viteză. Este de așteptat, dar ce faceți dacă nu doriți să stați cu ochii pe terminal?
Puteți folosi argumentul `-b` pentru a porni `wget` în fundal:
[email protected]:~# wget -b https://slack.com Continuing in background, pid 25430. Output will be written to ‘wget-log.1’. [email protected]:~#
Ignorarea erorilor de certificat
Această opțiune este utilă când trebuie să accesați aplicații web intranet care nu au un certificat valid. Implicit, `wget` va afișa o eroare atunci când un certificat nu este valid.
[email protected]:~# 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'.
Exemplul de mai sus este pentru un URL al cărui certificat a expirat. După cum se poate observa, a sugerat folosirea opțiunii `–no-check-certificate`, care ignoră orice validare a certificatului.
[email protected]:~# 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] [email protected]:~#
Interesant, nu-i așa?
Puteți vizualiza antetele de răspuns HTTP ale unui site direct în terminal.
Folosind opțiunea `-S`, veți afișa antetele, așa cum se vede mai jos pentru Coursera:
[email protected]:~# 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]
Manipularea User-Agent
Este posibil să doriți să accesați un site folosind un user-agent personalizat sau un user-agent specific al unui browser. Acest lucru este posibil prin specificarea opțiunii `–user-agent`. Exemplul de mai jos folosește user-agent-ul „MyCustomUserAgent”:
[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"
Când o aplicație este în dezvoltare, este posibil să nu aveți un URL dedicat pentru testare. Sau poate doriți să testați o instanță HTTP individuală folosind IP, dar trebuie să furnizați antetul de gazdă pentru ca aplicația să funcționeze corect. În această situație, `–header` este utilă.
Să luăm exemplul testării http://10.10.10.1 cu antetul de gazdă „application.com”:
wget --header="Host: application.com" http://10.10.10.1
Puteți injecta orice antet doriți, nu doar pe cel de gazdă.
Conectarea prin intermediul unui Proxy
Dacă lucrați într-un mediu DMZ, este posibil să nu aveți acces la site-uri de pe internet. Însă, vă puteți conecta folosind un proxy:
wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com
Nu uitați să înlocuiți variabila `$PROXYHOST:PORT` cu valorile reale.
Conectarea folosind un protocol TLS specific
În mod normal, se recomandă utilizarea OpenSSL pentru a testa protocoalele TLS. Însă, puteți folosi și `wget`.
`wget –secure-protocol=TLSv1_2 https://example.com`
Comanda de mai sus forțează `wget` să se conecteze folosind TLS 1.2.
Concluzie
Cunoașterea comenzilor potrivite vă poate fi de mare ajutor la locul de muncă. Sper că informațiile de mai sus vă oferă o idee clară despre ce se poate face cu `wget`.