libcurl para C++: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es libcurl y para qué sirve?

\n\n

libcurl es una potente y ampliamente utilizada biblioteca multiplataforma para la transferencia de datos a través de diversos protocolos de red. Escrita en C, proporciona una interfaz para C++ (a menudo llamada curlpp o simplemente un envoltorio de libcurl) para realizar solicitudes HTTP, descargar archivos, trabajar con FTP, SMTP y muchos otros protocolos. En el contexto de C++, libcurl es el estándar de facto para crear clientes HTTP.

\n\n

¿Para qué sirve libcurl en C++?

\n
    \n
  • Trabajar con API REST: Enviar solicitudes GET, POST, PUT, DELETE a servicios web.
  • \n
  • Descarga de archivos: Descargar imágenes, documentos, archivos comprimidos de internet.
  • \n
  • Envío de datos: Subir archivos al servidor, enviar formularios.
  • \n
  • Análisis de páginas web: Obtener código HTML para su posterior análisis.
  • \n
  • Autenticación: Soporte para esquemas Basic, Digest, OAuth, NTLM y otros.
  • \n
  • Trabajar con cookies: Gestión de sesiones y estado.
  • \n
  • SSL/TLS: Conexión segura a través de HTTPS.
  • \n
\n\n

La biblioteca se caracteriza por su alto rendimiento, estabilidad y soporte para prácticamente todos los protocolos de red modernos. Se utiliza en proyectos como cURL (línea de comandos), PHP (extensión cURL) y muchos otros.

\n\n

Instalación de libcurl para C++

\n\n

A diferencia de Python o JavaScript, en C++ no hay un gestor de paquetes único, por lo que la instalación depende de su sistema operativo y compilador.

\n\n

Instalación en Linux (Ubuntu/Debian)

\n
sudo apt update\nsudo apt install libcurl4-openssl-dev
\n

Para otras distribuciones (Fedora, CentOS, Arch) use los gestores de paquetes correspondientes (dnf, yum, pacman).

\n\n

Instalación en macOS

\n
brew install curl
\n\n

Instalación en Windows

\n

La forma más sencilla es usar vcpkg:

\n
git clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n.\\bootstrap-vcpkg.bat\n.\\vcpkg integrate install\n.\\vcpkg install curl
\n

O descargue los binarios precompilados desde el sitio oficial de curl.

\n\n

Conexión en un proyecto CMake

\n
find_package(CURL REQUIRED)\ntarget_link_libraries(your_project PRIVATE CURL::libcurl)
\n\n

Inicio rápido: solicitud HTTP GET simple

\n\n

Escribamos un programa simple que realice una solicitud GET a un sitio web y muestre los datos obtenidos.

\n\n
#include <iostream>\n#include <string>\n#include <curl/curl.h>\n\n// Función de callback para escribir datos en una cadena\nsize_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {\n    size_t totalSize = size * nmemb;\n    output->append(static_cast<char*>(contents), totalSize);\n    return totalSize;\n}\n\nint main() {\n    CURL* curl;\n    CURLcode res;\n    std::string response;\n\n    curl_global_init(CURL_GLOBAL_DEFAULT);\n    curl = curl_easy_init();\n\n    if (curl) {\n        curl_easy_setopt(curl, CURLOPT_URL, "https://api.github.com");\n        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);\n        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);\n        \n        // Ejecutamos la solicitud\n        res = curl_easy_perform(curl);\n        \n        if (res != CURLE_OK) {\n            std::cerr << "Error: " << curl_easy_strerror(res) << std::endl;\n        } else {\n            std::cout << "Respuesta del servidor:" << std::endl;\n            std::cout << response << std::endl;\n        }\n        \n        curl_easy_cleanup(curl);\n    }\n\n    curl_global_cleanup();\n    return 0;\n}
\n\n

Compilación:

\n
g++ -o http_client http_cl                    

Recommendations