Una herramienta que debería conocer todo programador/administrador de sistemas en cURL, utilizada para automatizar por línea de comandos transferencias de datos los distintos protocolos soportados. Además de este programa por línea de comandos, existe libcURL para poder ser usada desde C/C++ y existen versiones de esta biblitoteca según wikipedia en más de 50 lenguajes, en los que yo destaco C#,PERL,Python y PHP.
Definición Según wikipedia:
[…] cURL es una herramienta para usar en un intérprete de comandos para transferir archivos con sintaxis URL, soporta FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, FILE y LDAP. cURL soporta certificados HTTPS, HTTP POST, HTTP PUT […]
Algunos usos frecuentes de cURL.
- Transferencias de datos en multitud de protocolos
- Web Testing
- Testing de servidores FTP.
Instalación de cURL/LibcURL
Para instalar cURL en ubuntu solo hace falta abrir una consola y escribir sudo apt-get install curl, pero yo quiero construir mi propia versión de cURL para que me soporte protocolos con ssl, ssh o rtmp, para ello previamente hay que instalar los siguientes paquetes en Ubuntu:
- libssl-dev
- libssh2-1.dev
- librtmp-dev
Hay que descargar la última versión del código fuente en: http://curl.haxx.se/, desde donde se puede encontrar la última versión de cURL que hoy es la 7.31.0, una vez se descargue y se descomprima el tar.gz, se abre una consola dentro de la carpeta de instalación que en mi caso es /home/erjaimer/curl-7.31.0 y se procede a configurar la compilación para que soporte más protocolos:
$>./configure --with-ssl --with-ssh --with-rtmps
La Salida de esta orden es la siguiente, en donde se puede observar en rojo los protocolos soportados:
configure: Configured to build curl/libcurl:
curl version: 7.31.0
Host setup: i386-pc-linux-gnu
Install prefix: /usr/local
Compiler: gcc
SSL support: enabled (OpenSSL)
SSH support: enabled (libSSH2)
zlib support: enabled
krb4 support: no (--with-krb4*)
GSSAPI support: no (--with-gssapi)
SPNEGO support: no (--with-spnego)
TLS-SRP support: enabled
resolver: default (--enable-ares / --enable-threaded-resolver)
ipv6 support: enabled
IDN support: no (--with-{libidn,winidn})
Build libcurl: Shared=yes, Static=yes
Built-in manual: enabled
--libcurl option: enabled (--disable-libcurl-option)
Verbose errors: enabled (--disable-verbose)
SSPI support: no (--enable-sspi)
ca cert bundle: /etc/ssl/certs/ca-certificates.crt
ca cert path: no
LDAP support: no (--enable-ldap / --with-ldap-lib / --with-lber-lib)
LDAPS support: no (--enable-ldaps)
RTSP support: enabled
RTMP support: enabled (librtmp)
metalink support: no (--with-libmetalink)
Protocols: DICT FILE FTP FTPS GOPHER HTTP
HTTPS IMAP IMAPS POP3 POP3S RTMP RTSP SCP SFTP SMTP SMTPS TELNET TFTP
Faltaría compilar e instalar:
$> sudo make
$> sudo make install
Ahora quedaría testear si tenemos cURL correctamente instalado
$> curl
curl: try 'curl --help' or 'curl --manual' for more information
Ya se podría ejecutar cURL con los siguientes protocolos:
- DICT
- FILE
- FTP
- FTPS
- GOPHER
- HTTP
- HTTPS
- IMAP
- IMAPS
- POP3
- POP3S
- RTMP
- RTSP
- SCP
- SFTP
- SMTP
- SMTPS
- TELNET
- TFTP
Probando y compilando un ejemplo con libcURL:
Para este post voy a compilar el ejemplo más sencillo un get HTTP, este ejemplo se puede descargar desde https://raw.github.com/bagder/curl/master/docs/examples/simple.c pero voy a poner su código fuente, el fichero se llamaría http.c si se descarga a nuestro ordenador:
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
/* example.com is redirected, so we tell libcurl to follow redirection */
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
Para compilar y ejecutar:
$> gcc -o http http.c -lcurl && ./http
La salida sería el código HTML de http://www.example.com, para obtener más información sobre ejemplos y documentación visitar: http://curl.haxx.se/libcurl/c/example.html
Utilizando la ordén cURL
Para obtener el mismo resultado que el programa http compilado anteriormente hay que utilizar la orden de la siguiente manera:
$> curl http://www.example.com
Espero que os sirva.
Un saludo