Scaricare una pagina web

C++:
Scaricare una pagina web

How to: (Come fare:)

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

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL *curl;
    CURLcode res;
    std::string readBuffer;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();

    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);

        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
            std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;

        std::cout << readBuffer << std::endl;
        
        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();
    return 0;
}

Questo pezzo di codice utilizza libcurl per scaricare il contenuto di “http://example.com” e stamparlo sullo standard output.

Deep Dive (Nel Profondo)

Historicamente, scaricare dati dalla rete nella programmazione C++ ha richiesto una varietà di librerie perché il linguaggio standard non ha questa funzionalità. libcurl è una scelta popolare, ma esistono alternative come Boost.Asio o Poco. Ognuna ha un approccio e sintassi diversi. libcurl è considerata user-friendly con supporto a molteplici protocolli oltre HTTP/HTTPS, come FTP, SMTP, e altro. È importante gestire gli errori di rete e fare pulizia nell’uso della libreria per evitare memory leak.

See Also (Vedi Anche)