C/Visual C - HTTP en C#

 
Vista:

HTTP en C#

Publicado por Vasco (2 intervenciones) el 10/03/2003 16:03:20
Necesito establecer una conexión HTTP para bajar un archivo (creo que con el comando GET) en C bajo linux. Alguna idea? librería que hay que incluir?
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Establecer conexión HTTP y descargar un archivo en C bajo Linux

Publicado por Alejandro (1153 intervenciones) el 09/05/2025 00:07:58
Para establecer una conexión HTTP y descargar un archivo en C bajo Linux, puedes utilizar la biblioteca `libcurl`, que es una herramienta muy popular y poderosa para realizar solicitudes HTTP y manejar transferencias de datos.

Pasos para descargar un archivo usando `libcurl`



1. Instalar `libcurl`: Si no tienes `libcurl` instalado, puedes instalarlo utilizando el gestor de paquetes de tu distribución. Por ejemplo, en Debian/Ubuntu, puedes usar:
1
sudo apt-get install libcurl4-openssl-dev

2. Incluir la biblioteca: En tu código C, incluye el encabezado de `libcurl`:
1
#include <curl/curl.h>

3. Escribir el código para descargar el archivo: Aquí tienes un ejemplo básico de cómo usar `libcurl` para realizar una solicitud GET y descargar un archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <curl/curl.h>
 
// Función de escritura para manejar los datos descargados
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}
 
int main() {
    CURL *curl;
    CURLcode res;
    FILE *fp;
    const char *url = "http://example.com/file.txt"; // URL del archivo a descargar
    const char *outfilename = "downloaded_file.txt"; // Nombre del archivo de salida
 
    curl = curl_easy_init();
    if (curl) {
        fp = fopen(outfilename, "wb"); // Abrir el archivo en modo binario
        if (fp == NULL) {
            perror("Error al abrir el archivo");
            return 1;
        }
 
        curl_easy_setopt(curl, CURLOPT_URL, url); // Establecer la URL
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); // Establecer la función de escritura
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); // Establecer el archivo de salida
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // Seguir redirecciones
 
        // Realizar la solicitud GET
        res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() falló: %s\n", curl_easy_strerror(res));
        }
 
        fclose(fp); // Cerrar el archivo
        curl_easy_cleanup(curl); // Limpiar la sesión de curl
    }
 
    return 0;
}

Explicación del código:



- Función `write_data`: Esta función se utiliza para manejar los datos que se descargan. Escribe los datos en el archivo especificado.

- Inicialización de `libcurl`: Se inicializa `libcurl` con `curl_easy_init()`.

- Configuración de opciones: Se configuran varias opciones, como la URL del archivo a descargar, la función de escritura y el archivo de salida.

- Realizar la solicitud: Se llama a `curl_easy_perform()` para realizar la solicitud GET.

- Limpieza: Se cierra el archivo y se limpia la sesión de `libcurl`.

Compilación



Para compilar el programa, asegúrate de enlazar con la biblioteca `libcurl`. Puedes hacerlo con el siguiente comando:

1
gcc -o download_file download_file.c -lcurl

Consideraciones:



- Manejo de errores: Asegúrate de manejar adecuadamente los errores, como la apertura de archivos y la ejecución de `curl_easy_perform()`.

- Seguridad: Si estás descargando archivos de fuentes no confiables, considera implementar medidas de seguridad adicionales.

Este enfoque te permitirá establecer una conexión HTTP y descargar un archivo en C bajo Linux utilizando `libcurl`. ¡Buena suerte, Vasco!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar