Nedlasting av en nettside

C++:
Nedlasting av en nettside

How to:

For å laste ned en nettside i C++, kan du bruke biblioteket libcurl. Her er et enkelt eksempel:

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

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

void download_webpage(const std::string &url) {
    CURL *curl = curl_easy_init();
    if(curl) {
        std::string response_string;
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // Setter URL
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); // Callback for datamottak
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_string); // Data for å skrive til
        
        CURLcode res = curl_easy_perform(curl); // Utfør request
        if(res != CURLE_OK) {
            std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
        } else {
            std::cout << response_string << std::endl; // Printer HTML
        }
        curl_easy_cleanup(curl);
    }
}

int main() {
    const std::string url = "http://example.com";
    download_webpage(url);
    return 0;
}

Forventet output er HTML-innholdet til example.com.

Deep Dive:

Før libcurl, måtte programmerere på Unix systemer gjerne stole på systemkall for å gjøre HTTP-requests via verktøy som wget eller curl i kommandolinjen. libcurl gir en programmeringsgrensesnitt (API) for flere språk, inkludert C++, noe som gjør det mulig å implementere nedlasting av websider på en mer bærbar og integrert måte.

There are alternatives, such as Boost.Asio for asynchronous network programming, or Poco libraries that offer more than just network capabilities. It all depends on the needs and constraints of your project.

Hoveddetaljer til å tenke på inkluderer håndtering av HTTP-protokoller, SSL/TLS for sikre forbindelser, og foutbehandling. C++ gir ingen innebygde nettverks biblioteker i standardbiblioteket (per Knowledge Cut-off, Januar 2023), så tredjepartsbiblioteker blir ofte brukt.

See Also:

For further reading and resources, you may check the following: