10 ejemplos de comandos de wget para ayudarlo a solucionar problemas: prueba de wget

Una de las utilidades más utilizadas por sysadmin es wget. Puede ser muy útil durante la resolución de problemas relacionados con la web.

¿Qué es el comando wget?

El comando wget es una popular utilidad de línea de comandos de Unix/Linux para obtener contenido de la web. Es de uso gratuito y proporciona una forma no interactiva de descargar archivos de la web. El comando wget es compatible con los protocolos HTTPS, HTTP y FTP listos para usar. Además, también puede usar proxies HTTP con él.

¿Cómo lo ayuda wget a solucionar problemas?

Hay muchas maneras.

Como administrador de sistemas, la mayor parte del tiempo, trabajará en una terminal y, al solucionar problemas relacionados con aplicaciones web, es posible que no desee verificar toda la página, sino solo la conectividad. O bien, desea verificar los sitios web de la intranet. O bien, desea descargar una página determinada para verificar el contenido.

wget no es interactivo, lo que significa que puede ejecutarlo en segundo plano incluso cuando está desconectado. Puede haber muchos casos en los que sea esencial que se desconecte del sistema incluso al recuperar archivos de la web. En segundo plano, el wget se ejecutará y finalizará el trabajo asignado.

También se puede usar para obtener todo el sitio web en sus máquinas locales. Puede seguir enlaces en páginas XHTML y HTML para crear una versión local. Para ello, tiene que descargar la página de forma recursiva. Esto es muy útil ya que puede usarlo para descargar páginas o sitios importantes para verlos sin conexión.

Veámoslos en acción. La sintaxis del wget es la siguiente.

wget [option] [URL]

Descargar una página web

Intentemos descargar una página. Ej: github.com

wget github.com

Si la conectividad está bien, descargará la página de inicio y mostrará el resultado como se muestra a continuación.

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

Descargar varios archivos

Útil cuando tienes que descargar varios archivos a la vez. Esto puede darle una idea sobre cómo automatizar la descarga de archivos a través de algunos scripts.

Intentemos descargar los archivos de Python 3.8.1 y 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

Entonces, como puede adivinar, la sintaxis es la siguiente.

wget URL1 URL2 URL3

Solo tienes que asegurarte de dejar espacio entre las URL.

Limitar la velocidad de descarga

Sería útil cuando desee comprobar cuánto tiempo tarda su archivo en descargarse con un ancho de banda diferente.

Con la opción –limit-rate, puede limitar la velocidad de descarga.

Aquí está el resultado de la descarga del archivo 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]

Se tardó 0,05 segundos en descargar archivos de 13,92 MB. Ahora, intentemos limitar la velocidad 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]

Reducir el ancho de banda tomó más tiempo para descargar: 28 segundos. Imagínese, sus usuarios se quejan de la descarga lenta y usted sabe que el ancho de banda de su red es bajo. Puede probar rápidamente –limit-rate para simular el problema.

Descargar en segundo plano

La descarga de archivos grandes puede llevar tiempo o el ejemplo anterior en el que también desea establecer el límite de velocidad. Esto es de esperar, pero ¿y si no quieres mirar tu terminal?

Bueno, puede usar el argumento -b para iniciar wget en segundo plano.

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

Ignorar error de certificado

Esto es útil cuando necesita verificar las aplicaciones web de la intranet que no tienen el certificado adecuado. De forma predeterminada, wget arrojará un error cuando un certificado no sea válido.

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

El ejemplo anterior es para la URL en la que ha caducado el certificado. Como puede ver, ha sugerido usar –no-check-certificate que ignorará cualquier validación de certificado.

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

Genial, ¿no?

Vea el encabezado de respuesta HTTP de un sitio determinado en la terminal.

El uso de -S imprimirá el encabezado, como puede ver a continuación para 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]

Manipular el agente de usuario

Puede haber una situación en la que desee conectar un sitio mediante un agente de usuario personalizado. O el agente de usuario del navegador específico. Esto se puede hacer especificando –user-agent. El siguiente ejemplo es para el agente de usuario como MyCustomUserAgent.

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

Cuando una aplicación aún está en desarrollo, es posible que no tenga una URL adecuada para probarla. O bien, es posible que desee probar una instancia HTTP individual mediante IP, pero debe proporcionar el encabezado del host para que la aplicación funcione correctamente. En esta situación, –header sería útil.

Tomemos un ejemplo de prueba http://10.10.10.1 con encabezado de host como application.com

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

No solo aloja, sino que puedes inyectar cualquier encabezado que desees.

Conéctate usando Proxy

Si está trabajando en un entorno DMZ, es posible que no tenga acceso a sitios de Internet. Pero puede aprovechar el proxy para conectarse.

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

No olvide actualizar la variable $PROXYHOST:PORT con las reales.

Conéctese usando un protocolo TLS específico

Por lo general, recomendaría usar OpenSSL para probar el protocolo TLS. Pero también puedes usar wget.

wget –protocolo seguro=TLSv1_2 https://example.com

Lo anterior obligará a wget a conectarse a través de TLS 1.2.

Conclusión

Conocer el comando necesario puede ayudarte en el trabajo. Espero que lo anterior le dé una idea de lo que puede hacer con wget.