10 esempi di comandi wget per aiutarti a risolvere i problemi: wget Test

Una delle utilità utilizzate di frequente da sysadmin è wget. Può essere molto utile durante la risoluzione dei problemi relativi al Web.

Cos’è il comando wget?

Il comando wget è una popolare utility da riga di comando Unix/Linux per recuperare il contenuto dal web. È gratuito e fornisce un modo non interattivo per scaricare file dal Web. Il comando wget supporta i protocolli HTTPS, HTTP e FTP pronti all’uso. Inoltre, puoi anche utilizzare proxy HTTP con esso.

In che modo wget ti aiuta a risolvere i problemi?

Ci sono molti modi.

In qualità di amministratore di sistema, la maggior parte delle volte lavorerai su un terminale e, durante la risoluzione dei problemi relativi alle applicazioni Web, potresti non voler controllare l’intera pagina ma solo la connettività. Oppure si desidera verificare i siti Web intranet. Oppure vuoi scaricare una determinata pagina per verificarne il contenuto.

wget non è interattivo, il che significa che puoi eseguirlo in background anche quando sei disconnesso. Possono esserci molti casi in cui è essenziale disconnettersi dal sistema anche durante il recupero di file dal Web. In background, il wget verrà eseguito e terminato il lavoro assegnato.

Può anche essere utilizzato per ottenere l’intero sito Web sui computer locali. Può seguire i collegamenti nelle pagine XHTML e HTML per creare una versione locale. Per farlo, deve scaricare la pagina in modo ricorsivo. Questo è molto utile in quanto puoi usarlo per scaricare pagine o siti importanti per la visualizzazione offline.

Vediamoli in azione. La sintassi di wget è la seguente.

wget [option] [URL]

Scarica una pagina web

Proviamo a scaricare una pagina. Es: github.com

wget github.com

Se la connettività va bene, scaricherà la home page e mostrerà l’output come di seguito.

[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]:~#

Scarica più file

Utile quando devi scaricare più file contemporaneamente. Questo può darti un’idea sull’automazione del download dei file tramite alcuni script.

Proviamo a scaricare i file Python 3.8.1 e 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

Quindi, come puoi immaginare, la sintassi è la seguente.

wget URL1 URL2 URL3

Devi solo assicurarti di dare spazio tra gli URL.

Limita la velocità di download

Sarebbe utile quando si desidera controllare quanto tempo impiega il file per il download con una larghezza di banda diversa.

Usando l’opzione –limit-rate, puoi limitare la velocità di download.

Ecco l’output del download del file 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]

Ci sono voluti 0,05 secondi per scaricare file da 13,92 MB. Ora, proviamo a limitare la velocità a 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]

La riduzione della larghezza di banda ha richiesto più tempo per il download: 28 secondi. Immagina che i tuoi utenti si stiano lamentando del download lento e sai che la loro larghezza di banda di rete è bassa. Puoi provare rapidamente –limit-rate per simulare il problema.

Scarica in background

Il download di file di grandi dimensioni può richiedere del tempo o l’esempio sopra in cui si desidera impostare anche il limite di velocità. Questo è previsto, ma cosa succede se non vuoi fissare il tuo terminale?

Bene, puoi usare -b argomento per avviare il wget in background.

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

Ignora errore certificato

Ciò è utile quando è necessario controllare le applicazioni Web Intranet che non dispongono del certificato corretto. Per impostazione predefinita, wget genererà un errore quando un certificato non è valido.

[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'.

L’esempio sopra è per l’URL in cui cert è scaduto. Come puoi vedere, ha suggerito di utilizzare –no-check-certificate che ignorerà qualsiasi convalida del certificato.

[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]:~#

Fantastico, vero?

Vedere l’intestazione della risposta HTTP di un determinato sito sul terminale.

Usando -S verrà stampata l’intestazione, come puoi vedere di seguito per 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]

Manipolare lo User-Agent

Potrebbe verificarsi una situazione in cui desideri connettere un sito utilizzando uno user-agent personalizzato. O lo user-agent del browser specifico. Questo è possibile specificando –user-agent. L’esempio seguente è per l’agente utente come MyCustomUserAgent.

[email protected]:~# wget https://gf.dev --user-agent="MyCustomUserAgent"

Quando un’applicazione è ancora in fase di sviluppo, potresti non avere un URL corretto per testarla. In alternativa, potresti voler testare una singola istanza HTTP utilizzando IP, ma devi fornire l’intestazione host affinché l’applicazione funzioni correttamente. In questa situazione, –header sarebbe utile.

Prendiamo un esempio di test di http://10.10.10.1 con l’intestazione host come application.com

wget --header="Host: application.com" http://10.10.10.1

Non solo host, ma puoi inserire qualsiasi intestazione che ti piace.

Connettiti usando il proxy

Se stai lavorando in un ambiente DMZ, potresti non avere accesso ai siti Internet. Ma puoi sfruttare il proxy per connetterti.

wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com

Non dimenticare di aggiornare la variabile $PROXYHOST:PORT con quelle effettive.

Connettiti utilizzando un protocollo TLS specifico

Di solito, consiglierei di utilizzare OpenSSL per testare il protocollo TLS. Ma puoi usare anche wget.

wget –secure-protocol=TLSv1_2 https://example.com

Quanto sopra forzerà wget a connettersi su TLS 1.2.

Conclusione

Conoscere il comando necessario può aiutarti al lavoro. Spero che quanto sopra ti dia un’idea di cosa puoi fare con wget.