Inviare una richiesta HTTP

C:
Inviare una richiesta HTTP

Come fare:

Per inviare una richiesta HTTP in C, generalmente ci si affida a librerie come libcurl, poiché C non ha un supporto incorporato per i protocolli web. Ecco un semplice esempio che utilizza libcurl per eseguire una richiesta GET:

Prima di tutto, assicurati di avere libcurl installato sul tuo sistema. Poi, includi gli header necessari e collega la tua libreria libcurl nel file sorgente:

#include <stdio.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl;
    CURLcode res;

    curl = curl_easy_init(); // Inizializza un handle libcurl
    if(curl) {
        // Imposta l'URL che riceve l'handle libcurl
        curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
        // Definisce una callback per ottenere i dati
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL); 
        
        // Esegue la richiesta, res riceverà il codice di ritorno
        res = curl_easy_perform(curl);
        // Controlla gli errori
        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(res));

        // Pulizia sempre
        curl_easy_cleanup(curl);
    }
    return 0;
}

Compila questo con qualcosa del tipo gcc -o http_request http_request.c -lcurl, l’esecuzione dovrebbe effettuare una semplice richiesta GET a “http://example.com”.

Output di esempio

Poiché l’esempio non elabora la risposta del server, l’esecuzione non produrrà un output visibile al di là di eventuali messaggi di errore. Integrare la funzione di callback per elaborare i dati ricevuti è essenziale per un’interazione significativa.

Approfondimento

Il concetto di invio di richieste HTTP da un programma C si basa sulle potenti capacità di rete del linguaggio, unite a librerie esterne, poiché C stesso è un linguaggio di basso livello senza supporto incorporato per i protocolli internet di alto livello. Storicamente, i programmatori utilizzavano manualmente la programmazione socket in C, un processo complesso e tedioso, per interagire con i server web prima dell’avvento di librerie dedicate come libcurl.

Libcurl, costruito sopra C, semplifica il processo, astratto i dettagli complessi della programmazione socket e le specifiche del protocollo HTTP. Supporta molti protocolli oltre a HTTP/HTTPS, inclusi FTP, SMTP e altri, rendendolo uno strumento versatile per la programmazione di rete in C.

Sebbene l’uso di libcurl per le richieste HTTP in C sia pratico, la programmazione moderna spesso si orienta verso lingue con supporto incorporato per tali compiti, come Python (libreria requests) o JavaScript (Fetch API). Queste alternative offrono una sintassi più semplice e leggibile a scapito del controllo granulare e delle ottimizzazioni delle prestazioni possibili in C attraverso la manipolazione diretta dei socket e l’uso accurato delle librerie.

Per applicazioni critiche in termini di prestazioni o dove è necessaria un’interazione diretta a livello di sistema, C rimane un’opzione valida, in particolare con libcurl che semplifica le complessità della comunicazione web. Tuttavia, per la maggior parte delle interazioni web di alto livello, esplorare linguaggi di programmazione web più dedicati potrebbe rivelarsi più efficiente.