
Hace poco que conocí la librería libcurl y, la verdad, estoy encantado de haberlo hecho. Os cuento mi experiencia.
1.- ¿Qué es eso de libcurl?
Es una librería (una colección de funciones) que facilita tu vida si quieres programar aplicaciones que realicen conexiones y transferencias con diversos protocolos tales como: FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, fichero, métodos GET, PUT, POST, SSL, proxies, tunneling ...
Además es multiplataforma: Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS ...
libcurl está ampliamente extendido y por eso existen API's para múltiples lenguajes de programación: Ruby, Java, Mono, .NET, Perl, PHP, Python y muchos más. El API "oficial" es el de C.
2.- ¿Para qué vale libcurl?
Pues realmente para no andarte con rodeos complicándote la vida e ir al grano con tu programa. Si quieres hacer un upload a un ftp puedes:
a) perder un montón de tiempo y esfuerzo y empollarte todo lo relacionado con ftp o
b) usar libcurl (u otra librería de cliente multiprotocolo)
3.- ¿Cómo compilo libcurl?
Muy sencillo:
- Bájate el código de http://curl.haxx.se/download.html
- Ejecuta el configure (--help para ayuda; útil --prefix=/path para instalar en un directorio en concreto)
- Escribe make
- Si todo ha ido bien escribe make install
4.- ¿Cómo desarrollo con libcurl?
libcurl ofrece una serie de funciones easy que son de lo más sencillo, puedes comprobarlo en los ejemplos.
Además puedes echarle un ojo al fántastico tutorial que han escrito.
5.- Un ejemplo de programa con libcurl.
/*****************************************************************************
* Project
* Rollos de INFORMÁTICOS
*
* MFC - 04/04/2009
*/
#include
#include
int main(void)
{
CURL *curl;
CURLcode res;
long state;
char* eff_url;
double totaltime;
double starttime;
double transfertime;
double downl_bytes;
double downl_speed;
double content_len;
double filetime;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "la_url_que_quieras");
//curl_easy_setopt(curl, CURLOPT_PORT, 22);
/*curl_easy_setopt(curl,
CURLOPT_USERPWD,
"usuario:password");*/
/*curl_easy_setopt(curl,
CURLOPT_SSH_AUTH_TYPES,
CURLSSH_AUTH_PASSWORD);*/
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,1);
curl_easy_setopt(curl, CURLOPT_MAXREDIRS,3);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "nombre-de-agente");
curl_easy_setopt(curl, CURLOPT_FILETIME,1);
res = curl_easy_perform(curl);
printf("Version de libcurl: [%s]\n",curl_version());
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &state);
printf("El codigo de respuesta es: [%03ld]\n",state);
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL,&eff_url);
printf("La URL efectiva es: [%s]\n",eff_url);
state = 0;
curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, &state);
printf("El codigo de conexion es: [%03ld]\n",state);
curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &totaltime);
printf("El tiempo total en segundos es: [%.3f]\n",totaltime);
curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &starttime);
printf("El tiempo hasta iniciar la descarga en segundos es: [%.3f]\n",starttime);
transfertime = totaltime - starttime;
printf("El tiempo de transferencia en segundos es: [%.3f]\n",transfertime);
curl_easy_getinfo(curl,CURLINFO_SIZE_DOWNLOAD, &downl_bytes);
printf("El tamanio de la descarga en bytes es: [%.3f]\n",downl_bytes);
curl_easy_getinfo(curl,CURLINFO_SPEED_DOWNLOAD, &downl_speed);
printf("La velocidad de la descarga en bytes/s es: [%.3f]\n",downl_speed);
curl_easy_getinfo(curl,CURLINFO_CONTENT_LENGTH_DOWNLOAD, &content_len);
printf("El tamanio de la descarga obtenida del server es: [%.3f]\n",content_len);
curl_easy_getinfo(curl,CURLINFO_FILETIME, &filetime);
printf("La fecha de modificacion es: [%.3f]\n",filetime);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
Gracias por llegar hasta aquí y espero que os sea de alguna utilidad
Imagen: http://www.sxc.hu/photo/1110057
0 comentarios:
Publicar un comentario en la entrada