Cómo consumir un API REST en C++ utilizando la biblioteca cURL.
Preparación Asegúrate de que tengas instalada la biblioteca cURL en tu sistema. Puedes instalarla mediante un administrador de paquetes o descargarla desde el sitio web oficial de cURL: https://curl.haxx.se/download.html.
Inclusión de encabezados y definición de estructuras:
En esta sección, se incluyen los encabezados necesarios para trabajar con cURL y se define una estructura llamada MemoryStruct
para almacenar la respuesta de la solicitud HTTP. Esta estructura se utiliza para guardar los datos recibidos en la respuesta del servicio REST.
Función WriteMemoryCallback
:
Esta función se utiliza como una función de devolución de llamada (callback) para procesar los datos recibidos en la respuesta de la solicitud HTTP. Cuando se realiza la solicitud con cURL, esta función se llama automáticamente por cURL para manejar los datos recibidos. Los datos se copian a la memoria asignada dinámicamente (memory
en la estructura MemoryStruct
) para su posterior procesamiento.
Función main
:
En la función main
, se inicia la biblioteca cURL llamando a curl_easy_init()
. Este es el punto de partida para trabajar con cURL. Si la inicialización es exitosa, puedes proceder a configurar y realizar la solicitud HTTP.
Configuración de la solicitud HTTP:
Se crea una estructura MemoryStruct
llamada chunk
para almacenar la respuesta de la solicitud. Luego, se configura la solicitud HTTP mediante curl_easy_setopt
. Se establece la URL del servicio REST, se especifica la función de devolución de llamada para manejar los datos de respuesta y se pasa un puntero a la estructura chunk
como datos de escritura.
Realización de la solicitud HTTP:
Se utiliza curl_easy_perform
para realizar la solicitud HTTP. Luego, se verifica si la solicitud se realizó con éxito y se imprime la respuesta en la consola estándar.
Liberación de recursos:
Programa completo en C++
#include <string>
#include <curl/curl.h>
// Estructura de datos para almacenar la respuesta de la solicitud HTTP
struct MemoryStruct {
char* memory;
size_t size;
};
// Función para escribir los datos recibidos en la respuesta a la memoria
size_t WriteMemoryCallback(void* contents, size_t size, size_t nmemb, void* userp) {
size_t realsize = size * nmemb;
struct MemoryStruct* mem = (struct MemoryStruct*)userp;
mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1);
if (mem->memory == nullptr) {
std::cerr << "No se pudo asignar memoria" << std::endl;
return 0;
}
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}
int main() {
CURL* curl;
CURLcode res;
// Inicializar la biblioteca cURL
curl = curl_easy_init();
if (curl) {
struct MemoryStruct chunk;
chunk.memory = (char*)malloc(1); // Inicializar la memoria
chunk.size = 0;
// URL del servicio REST que deseas consumir
const char* url = "https://api.ejemplo.com/data";
// Configurar la solicitud HTTP GET
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk);
// Realizar la solicitud HTTP
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "Error en la solicitud cURL: " << curl_easy_strerror(res) << std::endl;
} else {
// Imprimir la respuesta
std::cout << "Respuesta del servicio web:" << std::endl;
std::cout << chunk.memory << std::endl;
}
// Liberar la memoria utilizada por cURL
curl_easy_cleanup(curl);
// Liberar la memoria utilizada para almacenar la respuesta
free(chunk.memory);
}
return 0;
}
Comentarios
Publicar un comentario