HTTP GET con libcurl en C++
libcURL es una librería para hacer más fácil la programación de aplicaciones que tienen que hacer uso de protocolos de red. En esta receta encontrarás una breve introducción a la programación con libcURL con un ejemplo básico.
Introducción
libcURL permite la programación de aplicaciones que necesitan el uso de protocolos de red para su funcionamiento. La estructura de programación de libcURL puede ser un poco "confusa" al principio pero se puede resumir en lo siguiente:- Creación de un contexto: es necesario crear un contexto de libcURL que se utilizará para realizar las operaciones de red que sean necesarias.
- Configuración del contexto: mediante opciones, se debe configurar el contexto creado.
- Ejecución del contexto: ejecutar el contexto ya configurado.
- Tareas posteriores: tras la ejecución del contexto se pueden realizar otras tareas como resultados de la operación realizada, estadísticas de la red...
Obteniendo libcURL
Para instalar libcurl puedes utilizar lo siguiente:http_get.cc
A continuación, se presenta un ejemplo que realiza un HTTP GET escrito en C++:#include < curl/curl.h > #include < iostream > using namespace std; int main(int argc, char* argv[]) { curl_global_init(CURL_GLOBAL_ALL); //Lo primero es crear un contexto. CURL* contexto = curl_easy_init(); if( contexto == NULL ){ cerr << "Unable to initialize cURL interface" << endl ; return 1; } /*El contexto creado debe ser configurado antes de lanzarse a su ejecucion. Para ello, se utiliza curl_easy_setopt*/ //La url objetivo curl_easy_setopt(contexto, CURLOPT_URL, argv[1]); //Si barra de progreso //Los valores son TRUE=1 o FALSE=1 curl_easy_setopt(contexto, CURLOPT_NOPROGRESS, 1); //WRITEHEADER necesita de un FILE* para escribir la cabecera //WRITE=recibir datos READ=mandar datos curl_easy_setopt(contexto, CURLOPT_WRITEHEADER, stderr); //Igual, pero para el contenido real de la respuesta curl_easy_setopt(contexto, CURLOPT_WRITEDATA, stdout); /*Fin de configuración. Ahora acción!.*/ const CURLcode rc = curl_easy_perform(contexto); if(CURLE_OK != rc){ cerr << "Error from cURL: " << curl_easy_strerror(rc) << endl; }else{ // Estudiar algunos parómetros de la respuesta cout << "\n\n **STATS** \n\n" << endl; double valorDouble ; long valorLong ; char* valorChar = NULL ; if( CURLE_OK == curl_easy_getinfo( contexto , CURLINFO_HTTP_CODE , &valorLong ) ){ cout << "Codigo de Respuesta: " << valorLong << endl ; } if( CURLE_OK == curl_easy_getinfo( contexto , CURLINFO_CONTENT_TYPE , &valorChar ) ){ cout << "Tipo de Contenido: " << valorChar << endl ; } if( CURLE_OK == curl_easy_getinfo( contexto , CURLINFO_SIZE_DOWNLOAD , &valorDouble ) ){ cout << "Bytes Descargados: " << valorDouble << "bytes" << endl ; } if( CURLE_OK == curl_easy_getinfo( contexto , CURLINFO_SPEED_DOWNLOAD , &valorDouble ) ){ cout << "Velocidad de Descarga: " << valorDouble << "bytes/sec" << endl ; } } //Limpiar contexto y el sistema de libcurl curl_easy_cleanup( contexto ) ; curl_global_cleanup() ; return( 0 ) ; }
Referencias
[ show comments ]
blog comments powered by Disqus