cURL es una herramienta de línea de comandos y una biblioteca que se puede utilizar para recibir y enviar datos entre un cliente y un servidor o dos máquinas conectadas a través de Internet. Admite una amplia gama de protocolos como HTTP, FTP, IMAP, LDAP, POP3, SMTP y muchos más.
Debido a su naturaleza versátil, cURL se usa en muchas aplicaciones y para muchos casos de uso. Por ejemplo, la herramienta de línea de comandos se puede usar para descargar archivos, probar API y depurar problemas de red. En este artículo, veremos cómo puede usar la herramienta de línea de comando cURL para realizar varias tareas.
Contenido
- 1 Instalar cURL
- 1.1Linux
- 1.2 MacOS
- 1.3 Ventanas
- 2 uso básico de cURL
- 3 Descarga de archivos con cURL
- 4 Anatomía de una solicitud/respuesta HTTP
- 5 siguientes redireccionamientos con cURL
- 6 Ver encabezados de respuesta con cURL
- 7 Visualización de encabezados de solicitudes y detalles de conexión
- 8 errores de silenciamiento
- 9 Configuración de encabezados de solicitud HTTP con cURL
- 10 Realización de solicitudes POST con cURL
- 11 Envío de datos JSON con cURL
- 12 Cambiar el método de solicitud
- 13 Replicación de solicitudes de navegador con cURL
- 14 Hacer que cURL falle en errores HTTP
- 15 Realización de solicitudes autenticadas con cURL
- 16 Soporte de protocolo de prueba con cURL
- 17 Configuración del encabezado del host y la opción de resolución de cURL
- 18 Resolver dominios en direcciones IPv4 e IPv6
- 19 Deshabilitar las comprobaciones de certificados de cURL
- 20 Solución de problemas del sitio web con "desglose de tiempo de cURL"
- 21 archivos de configuración cURL
- 22 Conclusión
Instalar cURL
Linux
La mayoría de las distribuciones de Linux tienen cURL instalado de forma predeterminada. Para verificar si está instalado en su sistema o no, escriba curl
en la ventana de tu terminal y presiona enter. Si no está instalado, mostrará un error de "comando no encontrado". Utilice los siguientes comandos para instalarlo en su sistema.
Para sistemas basados en Ubuntu/Debian use:
sudo apt update sudo apt install curl
Para sistemas CentOS/RHEL, utilice:
sudo yum install curl
Por otro lado, para sistemas Fedora, puede usar el comando:
sudo dnf install curl
MacOS
MacOS viene con cURL preinstalado y recibe actualizaciones cada vez que Apple lanza actualizaciones para el sistema operativo. Sin embargo, en caso de que desee instalar la versión más reciente de cURL, puede instalar el curl
Paquete casero. Una vez que instale Homebrew, puede instalarlo con:
brew install curl
Ventanas
Para Windows 10 versión 1803 y superior, cURL ahora se envía de forma predeterminada en el símbolo del sistema, por lo que puede usarlo directamente desde allí. Para versiones anteriores de Windows, el proyecto cURL tiene archivos binarios de Windows. Una vez que descargue el archivo ZIP y lo extraiga, encontrará una carpeta llamada curl-<version number>-mingw
. Mueva esta carpeta a un directorio de su elección. En este artículo, asumiremos que nuestra carpeta se llama curl-7.62.0-win64-mingw
, y lo hemos movido bajo C:
.
A continuación, debe agregar el bin
de cURL directorio al PATH
de Windows variable de entorno, para que Windows pueda encontrarla cuando escriba curl
en el símbolo del sistema. Para que esto funcione, debe seguir estos pasos:
- Abra el cuadro de diálogo "Propiedades avanzadas del sistema" ejecutando
systempropertiesadvanced
desde el cuadro de diálogo Ejecutar de Windows (tecla de Windows + R). - Haga clic en el botón "Variables de entorno".
- Haga doble clic en "Ruta" en la sección "Variables del sistema" y agregue la ruta
C:curl-7.62.0-win64-mingwbin
. Para Windows 10, puede hacer esto con el botón "Nuevo" a la derecha. En versiones anteriores de Windows, puede escribir;C:curl-7.62.0-win64-mingwbin
(Observe el punto y coma al principio) al final del cuadro de texto "Valor".
Una vez que complete los pasos anteriores, puede escribir curl
para comprobar si esto está funcionando. Si todo salió bien, debería ver el siguiente resultado:
C:UsersAdministrator>curl curl: try 'curl --help' or 'curl --manual' for more information
uso básico de cURL
La sintaxis básica para usar cURL es simplemente:
curl <url>
Esto obtiene el contenido disponible en la URL dada y lo imprime en la terminal. Por ejemplo, si ejecuta curl example.com
, debería poder ver la página HTML impresa, como se muestra a continuación:
Esta es la operación más básica que cURL puede realizar. En las próximas secciones, veremos las diversas opciones de línea de comandos aceptadas por cURL.
Descarga de archivos con cURL
Como vimos, cURL descarga directamente el contenido de la URL y lo imprime en la terminal. Sin embargo, si desea guardar la salida como un archivo, puede especificar un nombre de archivo con el -o
opción, así:
curl -o vlc.dmg https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
Además de guardar el contenido, cURL cambia para mostrar una bonita barra de progreso con estadísticas de descarga, como la velocidad y el tiempo empleado:
En lugar de proporcionar un nombre de archivo manualmente, puede dejar que cURL descubra el nombre de archivo con el -O
opción. Entonces, si desea guardar la URL anterior en el archivo vlc-3.0.4.dmg
, simplemente puede usar:
curl -O https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
Tenga en cuenta que cuando usa el -o
o el -O
opciones y existe un archivo con el mismo nombre, cURL lo sobrescribirá.
Si tiene un archivo parcialmente descargado, puede reanudar la descarga del archivo con -C -
opción, como se muestra a continuación:
curl -O -C - https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
Como la mayoría de las otras herramientas de línea de comandos, puede combinar diferentes opciones. Por ejemplo, en el comando anterior, podría combinar -O -C -
y escríbelo como -OC -
.
Anatomía de una solicitud/respuesta HTTP
Antes de profundizar en las funciones admitidas por cURL, analizaremos un poco las solicitudes y respuestas HTTP. Si está familiarizado con estos conceptos, salte directamente a las otras secciones.
Para solicitar un recurso, como una página web, o enviar algunos datos a un servidor, un cliente HTTP (como un navegador o cURL) realiza una solicitud HTTP al servidor. El servidor responde con una respuesta HTTP, que contiene el "contenido ” de esa página.
Las solicitudes HTTP contienen el método de solicitud, la URL, algunos encabezados y algunos datos opcionales como parte del "cuerpo de la solicitud". El método de solicitud controla cómo se debe procesar una determinada solicitud. Los tipos más comunes de métodos de solicitud son "GET" y "POST". Por lo general, usamos solicitudes "GET" para recuperar un recurso del servidor y "POST" para enviar datos al servidor para su procesamiento. Las solicitudes "POST" generalmente contienen algunos datos en el cuerpo de la solicitud, que el servidor puede usar.
Las respuestas HTTP son similares y contienen el código de estado, algunos encabezados y un cuerpo. El cuerpo contiene los datos reales que los clientes pueden mostrar o guardar en un archivo. El código de estado es un código de 3 dígitos que le dice al cliente si la solicitud tuvo éxito o falló, y cómo debe continuar. Los códigos de estado comunes son 2xx (éxito), 3xx (redireccionamiento a otra página) y 4xx/5xx (para errores).
HTTP es un "protocolo de capa de aplicación" y se ejecuta sobre otro protocolo llamado TCP. Se encarga de retransmitir los datos perdidos y garantiza que el cliente y el servidor transmitan datos a una velocidad óptima. Cuando usa HTTPS, otro protocolo llamado SSL/TLS se ejecuta entre TCP y HTTP para proteger los datos.
La mayoría de las veces, usamos nombres de dominio como google.com
para acceder a sitios web. La asignación del nombre de dominio a una dirección IP se realiza a través de otro protocolo denominado DNS.
Ahora debería tener suficiente experiencia para comprender el resto de este artículo.
Seguimiento de redireccionamientos con cURL
De forma predeterminada, cuando cURL recibe una redirección después de realizar una solicitud, no realiza automáticamente una solicitud a la nueva URL. Como ejemplo de esto, considere la URL https://www.facebook.com
. Cuando realiza una solicitud a través de esta URL, el servidor envía una redirección HTTP 3XX a https://www.facebook.com/
. Sin embargo, el cuerpo de la respuesta está vacío. Entonces, si prueba esto, obtendrá una salida vacía:
Si desea que cURL siga estos redireccionamientos, debe usar el -L
opción. Si repites haz una solicitud de https://www.facebook.com/
con el -L
bandera, así:
curl -L https://www.facebook.com/
Ahora, podrá ver el contenido HTML de la página, similar a la captura de pantalla a continuación. En la siguiente sección, veremos cómo podemos verificar que existe una redirección HTTP 3XX.
Tenga en cuenta que cURL solo puede seguir los redireccionamientos si el servidor respondió con un "redireccionamiento HTTP", lo que significa que el servidor usó un código de estado 3XX y usó el encabezado "Ubicación" para indicar la nueva URL. cURL no puede procesar métodos de redirección basados en Javascript o HTML, o el "encabezado de actualización".
Si hay una cadena de redireccionamientos, el -L
La opción solo seguirá las redirecciones hasta 500 veces. Puedes controlar el número máximo de redireccionamientos que seguirá con el --max-redirs
bandera.
curl -L --max-redirs 700 example.com
Si establece esta bandera en -1
, seguirá las redirecciones sin fin.
curl -L --max-redirs -1 example.com
Ver encabezados de respuesta con cURL
Al depurar problemas con un sitio web, es posible que desee ver los encabezados de respuesta HTTP enviados por el servidor. Para habilitar esta característica, puede usar el -i
opción.
Continuemos con nuestro ejemplo anterior y confirmemos que efectivamente hay una redirección HTTP 3XX cuando realiza una solicitud HTTP a https://www.facebook.com/
, ejecutando:
curl -L -i https://www.facebook.com/
Note que también hemos usado -L
para que cURL pueda seguir los redireccionamientos. También es posible combinar estas dos opciones y escribirlas como -iL
o -Li
en lugar de -L -i
.
Una vez que ejecute el comando, podrá ver la redirección HTTP 3XX, así como la respuesta de la página HTTP 200 OK después de seguir la redirección:
Si usa el -o
/-O
opción en combinación con -i
, los encabezados y el cuerpo de la respuesta se guardarán en un solo archivo.
Ver encabezados de solicitudes y detalles de conexión
En la sección anterior, vimos cómo puede ver los encabezados de respuesta HTTP usando cURL. Sin embargo, a veces es posible que desee ver más detalles sobre una solicitud, como los encabezados de solicitud enviados y el proceso de conexión. cURL ofrece el -v
flag (llamado "modo detallado") para este propósito, y se puede usar de la siguiente manera:
curl -v https://www.booleanworld.com/
La salida contiene datos de solicitud (marcados con >
), encabezados de respuesta (marcados con <
) y otros detalles sobre la solicitud, como la IP utilizada y el proceso de protocolo de enlace SSL (marcado con *
). El cuerpo de la respuesta también está disponible debajo de esta información. (Sin embargo, esto no se ve en la siguiente captura de pantalla).
La mayoría de las veces, no estamos interesados en el cuerpo de respuesta. Simplemente puede ocultarlo "guardando" la salida en el dispositivo nulo, que es /dev/null
en Linux y MacOS y NUL
en Windows:
curl -vo /dev/null https://www.booleanworld.com/ # Linux/MacOS curl -vo NUL https://www.booleanworld.com/ # Windows
Errores de silenciamiento
Anteriormente, vimos que cURL muestra una barra de progreso cuando guarda la salida en un archivo. Desafortunadamente, la barra de progreso puede no ser útil en todas las circunstancias. Como ejemplo, si oculta la salida con -vo /dev/null
, aparece una barra de progreso que no es nada útil.
Puede ocultar todas estas salidas adicionales usando el -s
encabezamiento. Si continuamos con nuestro ejemplo anterior pero ocultamos la barra de progreso, entonces los comandos serían:
curl -svo /dev/null https://www.booleanworld.com/ # Linux/MacOS curl -svo NUL https://www.booleanworld.com/ # Windows
El -s
Sin embargo, la opción es un poco agresiva, ya que incluso oculta mensajes de error. Para su caso de uso, si desea ocultar la barra de progreso, pero aún ver los errores, puede combinar el -S
opción.
Entonces, si está tratando de guardar la salida de cURL en un archivo pero simplemente quiere ocultar la barra de progreso, puede usar:
curl -sSvo file.html https://www.booleanworld.com/
Configuración de encabezados de solicitud HTTP con cURL
Al probar las API, es posible que deba establecer encabezados personalizados en la solicitud HTTP. cURL tiene el -H
opción que puede utilizar para este propósito. Si desea enviar el encabezado personalizado X-My-Custom-Header
con el valor de 123
a https://httpbin.org/get
, debe ejecutar:
curl -H 'X-My-Custom-Header: 123' https://httpbin.org/get
(httpbin.org es un sitio web muy útil que le permite ver los detalles de la solicitud HTTP que le envió).
Los datos devueltos por la URL muestran que este encabezado se estableció de hecho:
También puede anular cualquier encabezado predeterminado enviado por cURL, como los encabezados "User-Agent" o "Host". El cliente HTTP (en nuestro caso, cURL) envía el encabezado "User-Agent" para informar al servidor sobre el tipo y la versión del cliente utilizado. Además, el cliente usa el encabezado "Host" para informarle al servidor sobre el sitio que debe servir. Este encabezado es necesario porque un servidor web puede alojar varios sitios web en una sola dirección IP.
Además, si desea establecer varios encabezados, simplemente puede repetir el -H
opción según sea necesario.
curl -H 'User-Agent: Mozilla/5.0' -H 'Host: www.google.com' ...
Sin embargo, cURL tiene ciertos atajos para las banderas de uso frecuente. Puede configurar el encabezado "User-Agent" con el -A
opción:
curl -A Mozilla/5.0 https://httpbin.org/get
El encabezado "Referer" se usa para decirle al servidor la ubicación desde la cual fueron referidos por el sitio anterior. Por lo general, lo envían los navegadores cuando solicitan Javascript o imágenes vinculadas a una página, o cuando siguen redireccionamientos. Si desea establecer un encabezado de "Referencia", puede usar el -e
bandera:
curl -e https://www.google.com/ https://httpbin.org/get
De lo contrario, si está siguiendo un conjunto de redireccionamientos, simplemente puede usar -e ';auto'
y cURL se encargará de configurar los redireccionamientos por sí mismo.
Realizar solicitudes POST con cURL
De forma predeterminada, cURL envía solicitudes GET, pero también puede usarlo para enviar solicitudes POST con el -d
o --data
opción. Todos los campos deben ser dados como key=value
pares separados por el ampersand (&
) personaje. Como ejemplo, puede realizar una solicitud POST a httpbin.org con algunos parámetros:
curl --data "firstname=boolean&lastname=world" https://httpbin.org/post
A partir del resultado, puede ver fácilmente que publicamos dos parámetros (esto aparece debajo de la tecla "formulario"):
Cualquier carácter especial como @
, %
, =
o los espacios en el valor se deben codificar como URL de forma manual. Entonces, si desea enviar un parámetro "correo electrónico" con el valor "[correo electrónico protegido]", usaría:
curl --data "email=test%40example.com" https://httpbin.org/post
Alternativamente, puede usar --data-urlencode
para manejar esto por ti. Si desea enviar dos parámetros, email
y name
, así es como debes usar la opción:
curl --data-urlencode "[email protected]" --data-urlencode "name=Boolean World" https://httpbin.org/post
Si el --data
el parámetro es demasiado grande para escribirlo en el terminal, puede guardarlo en un archivo y luego enviarlo usando @
, así:
curl --data @params.txt example.com
Hasta ahora, hemos visto cómo puede realizar solicitudes POST utilizando cURL. Si desea cargar archivos mediante una solicitud POST, puede utilizar el -F
opción (“formulario”). Aquí, enviaremos el archivo test.c
, bajo el nombre del parámetro file
:
curl -F [email protected] https://httpbin.org/post
Esto muestra el contenido del archivo, indicando que se envió correctamente:
Enviar datos JSON con cURL
En la sección anterior, hemos visto cómo enviar solicitudes POST usando cURL. También puede enviar datos JSON utilizando el --data
opción. Sin embargo, la mayoría de los servidores esperan recibir una solicitud POST con pares clave-valor, similares a los que hemos discutido anteriormente. Por lo tanto, debe agregar un encabezado adicional llamado "Tipo de contenido:aplicación/json" para que el servidor comprenda que se trata de datos JSON y los maneje de manera adecuada. Además, no necesita codificar los datos de URL al enviar JSON.
Entonces, si tenía los siguientes datos JSON y desea realizar una solicitud POST a https://httpbin.org/post:
{ "email": "[email protected]", "name": ["Boolean", "World"] }
Luego, puede enviar los datos con:
curl --data '{"email":"[email protected]", "name": ["Boolean", "World"]}' -H 'Content-Type: application/json' https://httpbin.org/post
En este caso, puede ver que los datos aparecen debajo del json
valor en la salida de httpbin.org:
También puede guardar el archivo JSON y enviarlo de la misma manera que lo hicimos anteriormente:
curl --data @data.json https://httpbin.org/post
Cambiar el método de solicitud
Anteriormente, hemos visto cómo puede enviar solicitudes POST con cURL. A veces, es posible que deba enviar una solicitud POST sin ningún dato. En ese caso, simplemente puede cambiar el método de solicitud a POST con el -X
opción, así:
curl -X POST https://httpbin.org/post
También puede cambiar el método de solicitud a cualquier otra cosa, como PUT, DELETE o PATCH. Una excepción notable es el método HEAD, que no se puede configurar con el -X
opción. El método HEAD se usa para verificar si un documento está presente en el servidor, pero sin descargar el documento. Para usar el método HEAD, usa el -I
opción:
curl -I https://www.booleanworld.com/
Cuando realiza una solicitud HEAD, cURL muestra todos los encabezados de solicitud de forma predeterminada. Los servidores no envían ningún contenido cuando reciben una solicitud HEAD, por lo que no hay nada después de los encabezados:
Replicando solicitudes de navegador con cURL
Si desea replicar una solicitud realizada a través de su navegador a través de cURL, puede usar las herramientas de desarrollo de Chrome, Firefox y Safari para obtener un comando cURL para hacerlo.
Los pasos a seguir son los mismos para todas las plataformas y navegadores:
- Abrir herramientas de desarrollo en Firefox/Chrome (normalmente F12 en Windows/Linux y Cmd+Shift+I en una Mac)
- Ir a la pestaña de red
- Seleccione la solicitud de la lista, haga clic derecho y seleccione "Copiar como cURL"
El comando copiado contiene todos los encabezados, métodos de solicitud, cookies, etc. necesarios para replicar exactamente la misma solicitud. Puede pegar el comando en su terminal para ejecutarlo.
Hacer que cURL falle en errores HTTP
Curiosamente, cURL no diferencia entre una solicitud HTTP exitosa (2xx) y una solicitud HTTP fallida (4xx/5xx). Por lo tanto, siempre devuelve un estado de salida de 0 siempre que no haya problemas para conectarse al sitio. Esto dificulta la escritura de scripts de shell porque no hay forma de verificar si el archivo se pudo descargar correctamente.
Puede verificar esto haciendo una solicitud manualmente:
curl https://www.booleanworld.com/404 -sSo file.txt
Puede ver que curl no imprime ningún error, y el estado de salida también es cero:
Si también desea considerar estos errores HTTP, puede usar el -f
opción, así:
curl https://www.booleanworld.com/404 -fsSo file.txt
Ahora, puede ver que cURL imprime un error y también establece el código de estado en 22 para informar que ocurrió un error:
Hacer solicitudes autenticadas con cURL
Algunas páginas web y API requieren autenticación con un nombre de usuario y contraseña. Hay dos maneras de hacer esto. Puede mencionar el nombre de usuario y la contraseña con el -u
opción:
curl -u boolean:world https://example.com/
Alternativamente, puede simplemente agregarlo a la propia URL, con el <username>:<password>@<host>
sintaxis, como se muestra:
curl https://boolean:[email protected]/
En ambos métodos, curl realiza una autenticación "básica" con el servidor.
Soporte de protocolo de prueba con cURL
Debido a la amplia gama de protocolos admitidos por cURL, incluso puede usarlo para probar la compatibilidad con protocolos. Si desea comprobar si un sitio admite una determinada versión de SSL, puede utilizar el --sslv<version>
o --tlsv<version>
banderas Por ejemplo, si desea verificar si un sitio es compatible con TLS v1.2, puede usar:
curl -v --tlsv1.2 https://www.booleanworld.com/
La solicitud se realiza con normalidad, lo que significa que el sitio admite TLSv1.2. Ahora, verifiquemos si el sitio es compatible con SSL v3:
curl -v --sslv3 https://www.booleanworld.com/
Este comando arroja un handshake_failed
error, porque el servidor no es compatible con esta versión de SSL.
Tenga en cuenta que, según su sistema y la versión/configuración de la biblioteca, es posible que algunas de estas opciones de versión no funcionen. El resultado anterior se tomó de cURL de Ubuntu 16.04. Sin embargo, si intenta esto con cURL en MacOS 10.14, da un error:
También puede probar las versiones del protocolo HTTP de la misma manera, usando las banderas --http1.0
, --http1.1
o --http2
.
Configurar el encabezado del Host y el --resolve
de cURL opción
Anteriormente, hemos discutido cómo un servidor web elige servir diferentes sitios web a los visitantes según el encabezado "Host". Esto puede ser muy útil para verificar si su sitio web tiene configurado correctamente el alojamiento virtual, cambiando el encabezado "Host". Como ejemplo, supongamos que tiene un servidor local en 192.168.0.1
con dos sitios web configurados, a saber, example1.com
y example2.com
. Ahora, puede probar si todo está configurado correctamente configurando el encabezado del Host y verificando si se sirven los contenidos correctos:
curl -H 'Host: example1.com' https://192.168.0.1/ curl -H 'Host: example1.com' https://192.168.0.1/
Desafortunadamente, esto no funciona tan bien para los sitios web que usan HTTPS. Un solo sitio web puede configurarse para servir a varios sitios web, y cada sitio web utiliza su propio certificado SSL/TLS. Dado que SSL/TLS tiene lugar en un nivel más bajo que HTTP, esto significa que los clientes como cURL tienen que decirle al servidor a qué sitio web estamos tratando de acceder en el nivel SSL/TLS, para que el servidor pueda elegir el certificado correcto. Por defecto, cURL siempre le dice esto al servidor.
Sin embargo, si desea enviar una solicitud a una IP específica como la del ejemplo anterior, el servidor puede elegir un certificado incorrecto y eso hará que falle la verificación SSL/TLS. El Host
El encabezado solo funciona en el nivel HTTP y no en el nivel SSL/TLS.
Para evitar el problema descrito anteriormente, puede utilizar el --resolve
bandera. El indicador de resolución enviará la solicitud al puerto y la IP de su elección, pero enviará el nombre del sitio web en los niveles SSL/TLS y HTTP correctamente.
Consideremos el ejemplo anterior. Si estaba usando HTTPS y quería enviarlo al servidor local 192.168.0.1
, puedes usar:
curl https://example1.com/ --resolve example1.com:192.168.0.1:443
También funciona bien para HTTP. Supongamos que si su servidor HTTP estaba sirviendo en el puerto 8080, puede usar el --resolve
marque o configure el encabezado del Host y el puerto manualmente, así:
curl https://192.168.0.1:8080/ -H 'Host: example1.com:8080' curl https://example.com/ --resolve example1.com:192.168.0.1:8080
Los dos comandos mencionados anteriormente son equivalentes.
Resolver dominios a direcciones IPv4 e IPv6
A veces, es posible que desee verificar si se puede acceder a un sitio a través de IPv4 o IPv6. Puede forzar a cURL a conectarse a la versión IPv4 o IPv6 de su sitio usando el -4
o -6
banderas.
Tenga en cuenta que se puede acceder a un sitio web a través de IPv4 e IPv6 solo si:
- Existen registros DNS apropiados para el sitio web que lo vincula a direcciones IPv4 e IPv6.
- Tiene conectividad IPv4 e IPv6 en su sistema.
Por ejemplo, si desea verificar si puede acceder al sitio web icanhazip.com a través de IPv6, puede usar:
curl -6 https://icanhazip.com/
Si se puede acceder al sitio a través de HTTPS, debe obtener su propia dirección IPv6 en la salida. Este sitio web devuelve la dirección IP pública de cualquier cliente que se conecte a él. Entonces, según el protocolo utilizado, muestra una dirección IPv4 o IPv6.
También puede utilizar el -v
opción junto con -4
y -6
para obtener más detalles.
Deshabilitar las comprobaciones de certificados de cURL
De forma predeterminada, cURL verifica los certificados cuando se conecta a través de HTTPS. Sin embargo, a menudo es útil deshabilitar la verificación de certificados cuando intenta realizar solicitudes a sitios que utilizan certificados autofirmados o si necesita probar un sitio que tiene un certificado mal configurado.
Para deshabilitar las comprobaciones de certificados, use el -k
certificado. Probaremos esto haciendo una solicitud a expired.badssl.com, que es un sitio web que utiliza un certificado SSL caducado.
curl -k https://expired.badssl.com/
Con el -k
opción, las comprobaciones de certificado se ignoran. Entonces, cURL descarga la página y muestra el cuerpo de la solicitud correctamente. Por otro lado, si no usaste el -k
opción, obtendrá un error, similar al siguiente:
Resolución de problemas del sitio web con "desglose de tiempo de cURL"
Puede encontrarse con situaciones en las que un sitio web es muy lento para usted y le gustaría profundizar en el problema. Puede hacer que cURL muestre los detalles de la solicitud, como el tiempo necesario para la resolución de DNS, el establecimiento de una conexión, etc. con el -w
opción. Esto a menudo se denomina "desglose de tiempo" de cURL.
Como ejemplo, si desea ver estos detalles para conectarse a https://www.booleanworld.com/
, ejecuta:
curl https://www.booleanworld.com/ -sSo /dev/null -w 'namelookup:t%{time_namelookup}nconnect:t%{time_connect}nappconnect:t%{time_appconnect}npretransfer:t%{time_pretransfer}nredirect:t%{time_redirect}nstarttransfer:t%{time_starttransfer}ntotal:tt%{time_total}n'
(Si está ejecutando esto desde un sistema Windows, cambie el /dev/null
a NUL
).
Obtendrá un resultado similar a este:
Cada uno de estos valores está expresado en segundos y esto es lo que representa cada valor:
- búsqueda de nombre — El tiempo requerido para la resolución de DNS.
- conectar — El tiempo requerido para establecer la conexión TCP.
- conexión de aplicaciones — Este es el tiempo que se tarda en establecer conexiones para cualquier capa entre TCP y la capa de aplicación, como SSL/TLS. En nuestro caso, la capa de aplicación es HTTP. Además, si no existe tal capa intermedia (como cuando hay una solicitud HTTP directa), este tiempo siempre será 0.
- antes de la transferencia — Este es el tiempo transcurrido desde el inicio hasta que la transferencia del archivo está a punto de comenzar.
- redirigir — Este es el tiempo total que se tarda en procesar los redireccionamientos.
- iniciar transferencia — Tiempo transcurrido desde el inicio hasta que el primer byte está a punto de transferirse.
- total — El tiempo total que tardó cURL en completar todo el proceso.
Como ejemplo, digamos que enfrenta demoras al conectarse a un sitio web y nota que el valor de "búsqueda de nombre" era demasiado alto. Como esto indica un problema con el servidor DNS de su ISP, puede comenzar a investigar por qué la búsqueda de DNS es tan lenta y cambiar a otro servidor DNS si es necesario.
archivos de configuración de cURL
A veces, es posible que desee que todas las solicitudes cURL utilicen las mismas opciones. Pasar estas opciones a mano no es una solución factible, por lo que cURL le permite especificar opciones en un archivo de configuración.
El archivo de configuración predeterminado se encuentra en ~/.curlrc
en Linux/MacOS y %appdata%_curlrc
en Windows. Dentro de este archivo, puede especificar cualquier opción que necesite, como:
# Always use IPv4 -4 # Always show verbose output -v # When following a redirect, automatically set the previous URL as referer. referer = ";auto" # Wait 60 seconds before timing out. connect-timeout = 60
Después de crear el archivo anterior, intente realizar una solicitud con curl example.com
. Descubrirá que estas opciones surtieron efecto.
Si desea utilizar un archivo de configuración personalizado en lugar del predeterminado, puede utilizar -K
opción para apuntar curl a su archivo de configuración. Como ejemplo, si tiene un archivo de configuración llamado config.txt
, entonces puedes usarlo con:
curl -K config.txt example.com
Conclusión
En este artículo, hemos cubierto los usos más comunes del comando cURL. Por supuesto, este artículo solo toca la superficie y cURL puede hacer muchas otras cosas. Puede escribir man curl
en su terminal o simplemente visite esta página para ver la página del manual que enumera todas las opciones.