curl, abreviatura de «client URL» (URL del cliente), es una herramienta de línea de comandos que se utiliza para transferir datos a un servidor específico a través de su URL. curl es muy accesible: solo requiere una interfaz de línea de comandos (CLI) y una conexión a Internet, lo que hace que se utilice ampliamente en routers, impresoras, coches y dispositivos médicos. Incluso se utiliza en Marte.
Para la mayoría de los desarrolladores, curl es una herramienta excelente para probar rápidamente un servicio de backend directamente desde cualquier sistema operativo.
En este artículo, aprenderás más sobre curl y cómo utilizarlo.
Historia de curl
Creado y distribuido originalmente por el desarrollador brasileño Rafael Sagula en 1996, Daniel Stenberg se hizo cargo del proyecto poco después de su primer lanzamiento, implementando algunos ajustes que le permitieron obtener automáticamente los tipos de cambio de divisas de la web.
Dada su función, curl se denominó inicialmente httpget. Cuando aumentó el número de protocolos compatibles, el nombre cambió a urlget. En 1998, cuando el proyecto había crecido lo suficiente como para admitir funciones de carga, finalmente se denominó curl.
Su crecimiento no se detuvo ahí. A lo largo de los años, curl ha llegado a admitir más de veinticinco protocolos y varias funcionalidades, y gestiona cientos de millones de solicitudes al mes. Hoy en día, curl es un proyecto de código abierto mantenido por una comunidad de miembros voluntarios de todo el mundo.
Qué hace curl
La herramienta de línea de comandos de curl es conocida entre los desarrolladores por su capacidad para realizar solicitudes HTTP rápidas que facilitan las tareas de prueba y depuración. Mediante la ejecución de sencillos comandos en el terminal del ordenador, curl puede realizar solicitudes GET, POST u otras solicitudes HTTP compatibles con la API especificada.
Aunque los usuarios interactúan principalmente con la herramienta de línea de comandos de curl, la parte más difícil del trabajo la realiza su biblioteca de desarrollo llamada libcurl, una inmensa biblioteca que admite la mayoría de los códigos base. Esta parte fundamental del proyecto curl trabaja entre bastidores, gestionando las solicitudes y las respuestas.
Cómo utilizar curl
Para utilizar las líneas de comando de curl, necesita una CLI para ejecutarlas (Mac Terminal para macOS, Símbolo del sistema para Windows o Bash para Linux) y una conexión a Internet para que su máquina pueda completarlas, mostrar el resultado y leer la respuesta, cuando exista.
Cada comando curl sigue una sintaxis sencilla:
curl [OPCIONES] [URL]
En este esquema, [URL] es el punto final al que se envía la solicitud, mientras que [OPCIONES] es el comando que determina el tipo de solicitud HTTP que se desea realizar. El formato predeterminado es un guión seguido de una letra (por ejemplo, -d) o, en una forma más detallada, un doble guión seguido de una palabra (por ejemplo, --data). Además, puede especificar métodos HTTP utilizando la sintaxis -X [MÉTODO] (por ejemplo, -X POST).
A continuación se muestran algunos comandos curl que todo desarrollador debería conocer.
Envío de solicitudes GET
La forma más común de solicitud HTTP es una solicitud GET. Se utiliza con mayor frecuencia para recuperar datos, ya sea en forma de texto, imagen o archivo, de la dirección especificada. La sintaxis predeterminada para un comando de solicitud GET de curl es curl [URL]. Aquí no se especifica ninguna opción porque GET es el comportamiento predeterminado implícito definido para un comando curl.
Utilizando la URL de ejemplo https://dummyjson.com/products, una solicitud GET realizada a este punto final con curl tiene el siguiente aspecto:
curl https://dummyjson.com/products
El resultado de este comando es similar al siguiente:

Sin embargo, no todas las solicitudes GET son tan fáciles de realizar. Algunas requieren parámetros y, aunque se pueden especificar en la URL, es más fácil utilizar la sintaxis adecuada de curl. Añada -G para especificar una solicitud GET seguida de -d «parámetro1=valor1» para tantos parámetros como sea necesario. La sintaxis debería ser similar a esta: curl -G -d "parámetro1=valor1" -d "parámetro2=valor2" https://yoururl.com/yourendpoint.
Si envía una solicitud GET a la misma URL que antes, pero establece el número límite en solo 1, debería tener este aspecto:
curl -G -d "limit=1" https://dummyjson.com/products
curl utiliza este comando para formar la URL completa https://dummyjson.com/products?limit=1 utilizando la URL base y el parámetro que ha establecido para enviar una solicitud GET.
Este sería el resultado:

Aunque curl es potente, no formatea el resultado que recibe de la solicitud. En Mac, puede mejorar el aspecto de la respuesta añadiendo | json_pp a su línea de comandos:

Windows no viene con una herramienta preinstalada de este tipo, por lo que es necesario instalar una herramienta como jq y utilizar su atajo | jq para obtener JSON con un formato más atractivo.
Además, ten en cuenta que puedes gestionar las solicitudes curl utilizando tu lenguaje de programación integrado. Por ejemplo, puedes leer más sobre la gestión de solicitudes GET utilizando PHP en este blog.
Envío de solicitudes POST
Otro HTTP de uso frecuente es POST, que envía y actualiza datos a un servidor.
La sintaxis básica para una solicitud POST con curl es curl -X POST [URL]. Este tipo de solicitud envía una solicitud POST sin el cuerpo de los datos, lo que puede resultar útil cuando la solicitud se realiza únicamente para actualizar el estado de un elemento en la base de datos. Por ejemplo, utilizando la URL de ejemplo https://httpbin.org/anything, puede realizar una solicitud POST sencilla con el siguiente comando:
curl -X POST https://httpbin.org/anything
En la mayoría de los casos, es necesario cargar datos. Para ello, comience por indicar a curl cómo leer el cuerpo de los datos que está enviando especificando su formato. Añada un encabezado con el comando -H 'HEADER: VALUE' y, a continuación, inserte el cuerpo de su solicitud utilizando el comando de datos -d 'VALUE'. La sintaxis completa es curl -X POST -H 'HEADER: VALUE' -d 'VALUE' [URL].
Si desea enviar un cuerpo JSON que contenga un nombre y un apellido, puede utilizar Content-Type para definir su tipo de contenido en formato JSON y definir un JSON simple como sus datos:
curl -X POST -H "Content-Type: application/json" -d "{
"FirstName": "Joe",
"LastName": "Soap"
}" https://httpbin.org/anything
Este es el resultado del comando anterior:

Como puede ver, el campo de datos contiene el cuerpo de los datos que envió en su solicitud.
A partir de la versión 7.82, curl también introdujo el atajo --json, que simplifica tus solicitudes POST con un cuerpo JSON a curl --json '[CUERPO JSON]' [URL]. El comando para realizar la misma tarea que antes utilizando el atajo --json sería el siguiente:
curl --json '{"FirstName": "Joe", "LastName": "Soap"}' https://httpbin.org/anything
O si tienes un cuerpo JSON largo que prefieres guardar como un archivo local, puedes optar por cargarlo utilizando la sintaxis curl --json @[FILENAME].txt [URL]:
curl --json @nombre-de-archivo.txt https://httpbin.org/anything
Tienes varias opciones para cargar datos en tu servidor. Por ejemplo, es posible que necesites un formato diferente o que quieras cargar archivos en la web. Puedes obtener más información sobre las solicitudes POST con curl aquí.
Conexión a través de Proxies
Muchos desarrolladores utilizan servidores Proxy para mejorar la seguridad. Al igual que un cortafuegos, un servidor Proxy fiable protege a sus usuarios y a su red de posibles amenazas en Internet. También ofrece una mayor privacidad.
Para utilizar correctamente un Proxy, necesita la siguiente información sobre su Proxy:
- El protocolo, como
http:// - El host, normalmente cuatro números separados por puntos, como
71.00.00.00 - El puerto, normalmente un número de cuatro dígitos, como
0000 - Credenciales (opcionales) en forma de nombre de usuario y contraseña
La sintaxis de la URL de su Proxy sigue el esquema [PROTOCOLO]://[[NOMBRE DE USUARIO]:[CONTRASEÑA]][HOST]:[PUERTO] o, si el Proxy no está protegido por credenciales, [PROTOCOLO]://[HOST]:[PUERTO].
Una vez que tenga la URL del Proxy, puede configurarla en curl utilizando el comando -x. Tenga en cuenta que esto es diferente de -X, que se refiere a un método de solicitud HTTP personalizado. (Recuerde que curl distingue entre mayúsculas y minúsculas). También puede utilizar la opción más detallada --proxy si le resulta más fácil de recordar. Cualquiera de los dos comandos debe ir seguido de la URL del Proxy y la URL final.
Teniendo en cuenta los puntos mencionados, su comando curl para configurar una URL de Proxy debería ser similar a este:
curl --Proxy "http://71.00.00.00:0000" https://httpbin.org/ip
Su respuesta debe contener un objeto de origen, y su valor debe corresponder a la dirección IP del host del Proxy:
{
"origin": "71.00.00.00"
}
Esto significa que el sitio web cree que la solicitud proviene de la dirección IP de tu Proxy en lugar de la de tu ordenador.
Para obtener más información sobre cómo utilizar curl con Proxies, consulte este blog.
Uso de encabezados
Como habrás notado, algunas solicitudes HTTP requieren información adicional para completar una tarea correctamente. Por ejemplo, antes utilizaste el encabezado Content-Type en tu solicitud POST para que curl supiera cómo leer el cuerpo de los datos que subiste.
Los encabezados, que siempre van precedidos del comando -H, también se pueden utilizar en otras ocasiones.
Un tipo de encabezado común es Authorization: Bearer [TOKEN], que especifica un token de portador para autenticar y acceder a una URL protegida. Otro encabezado de uso común es Accept: application/json, que especifica una preferencia de respuesta JSON.
Si desea recibir una lista de los encabezados de respuesta de una URL, puede utilizar el comando -I curl en su terminal, de la siguiente manera:
curl -I https://dummyjson.com/products
También puede utilizar -i para mostrar la respuesta a la solicitud junto con los encabezados.
Puede obtener más información sobre los encabezados en curl en este blog.
Guardar resultados
A veces, leer los datos no es suficiente y es necesario guardar esos resultados en algún lugar del ordenador. Como se ha mencionado anteriormente, curl es capaz de manejar datos que vienen en formatos distintos al texto. Por ejemplo, puede descargar o cargar archivos completos.
Mediante el comando -o, puede especificar el nombre y la ubicación del archivo que desea guardar. Por ejemplo, si desea guardar el contenido de esta página en formato TXT en su escritorio, puede utilizar este comando:
curl -o /Users/User/Desktop/file.txt https://brightdata.com/blog
Ejecute este comando y abra su escritorio para ver el archivo recién guardado.
Carga de archivos
Al igual que curl es capaz de descargar archivos de la web, también le permite subirlos. Para que curl sepa que no está subiendo datos en forma textual, sino como un archivo real, debe colocar el símbolo @ antes del nombre del archivo.
Muchos desarrolladores cometen el error de utilizar solo el indicador -X POST, pensando que es el comando adecuado para cargar archivos en un servidor utilizando curl. Sin embargo, las cargas de archivos suelen requerir el tipo de contenido multipart/form-data, ya que los archivos se adjuntan como parte de un formulario. Por lo tanto, es necesario establecer el tipo de encabezado correcto junto con el indicador -X POST. El indicador -F establece el encabezado de tipo de contenido correcto y el indicador -X POST automáticamente, lo que da como resultado un comando más corto y sencillo para usted.
Con el indicador -F, puede enviar un formulario especificando los valores de los campos del formulario. Para adjuntar un archivo como campo de formulario, utilice el símbolo @ antes del nombre del archivo.
La sintaxis correcta es curl -F "file=@[RUTA DEL ARCHIVO]/[NOMBRE DEL ARCHIVO].txt" [URL], donde file es el nombre del campo de archivo en el formulario. Por ejemplo, suponiendo que desea cargar el archivo que descargó anteriormente a una URL ficticia como https://example.com/upload, su comando debería ser similar a este:
curl -F "file=@/Users/User/Desktop/file.txt" https://example.com/upload
Si desea cargar más de un archivo, puede repetir la sintaxis del comando -F tantas veces como desee antes de la definición de la URL.
Casos de uso de curl
Debido a su alta compatibilidad y versatilidad, curl se puede utilizar en una amplia gama de escenarios diferentes.
El uso más común de curl es como cliente HTTP para realizar pruebas de API, interactuar con servicios web y realizar diferentes operaciones HTTP, como GET o POST. Numerosos lenguajes de programación también utilizan libcurl para realizar solicitudes HTTP internamente.
Aunque curl se centra principalmente en realizar solicitudes HTTP y recuperar sus respuestas, también se puede combinar con otras herramientas o scripts para realizar parseo y procesar el contenido recibido. Por ejemplo, puede recuperar el contenido HTML de una página web como parte del Scraping web.
Ventajas de curl
curl ofrece muchas ventajas. Las más destacadas son su alta tasa de compatibilidad, que lo hace utilizable en casi cualquier dispositivo, y su sintaxis, que es fácil de aprender y dominar.
curl también es rico en funciones, versátil, rápido y especialmente ligero, lo que le permite realizar tareas sin sobrecargar la CPU.
Conclusión
En este artículo, ha aprendido más sobre la historia de curl, su funcionamiento, sus casos de uso y sus ventajas. También ha visto cómo ejecutar algunos de los comandos más básicos con curl.
Y si te interesan formas más rápidas de realizar Scraping web, no te pierdas la API Web Scraper de Bright Data. ¡Regístrate ahora para obtener una prueba gratuita!