C++:
Een webpagina downloaden
Hoe:
In de huidige C++ versie kunt u de CURL
bibliotheek gebruiken om webinhoud te downloaden. Hier is een basisvoorbeeld:
#include <curl/curl.h>
#include <iostream>
#include <string>
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 = curl_easy_init();
Als(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);
curl_easy_cleanup(curl);
if(res == CURLE_OK) {
std::cout << readBuffer << std::endl;
}
else {
std::cerr << "CURL Error: " << curl_easy_strerror(res) << std::endl;
}
}
return 0;
}
Voorbeelduitvoer:
<!doctype html>
<html>
<head>
<title>Voorbeeld Domein</title>
...
</head>
<body>
<div>
<h1>Voorbeeld Domein</h1>
<p>Dit domein is voor gebruik in illustratieve voorbeelden in documenten. U mag dit domein ...</p>
</div>
</body>
</html>
Diepgaande Verkenning
Oorspronkelijk was er geen standaardmanier om webpagina’s te downloaden met alleen C++. Programmeurs gebruikten platformspecifieke oplossingen of verschillende externe bibliotheken. Nu is libcurl
een breed ondersteunde en veelzijdige bibliotheek voor het overbrengen van gegevens met URL’s. Gecompileerd en gelinkt met uw C++ code, is curl een voor de hand liggend hulpmiddel.
Alternatieven voor libcurl zijn Poco’s HTTPClientSession en C++ Rest SDK (ook bekend als Casablanca). Terwijl libcurl C-gebaseerd is en ongeveer zo laagdrempelig als je comfortabel kunt gaan wat betreft HTTP-verzoeken, bieden Poco en Casablanca meer idiomatische C++ interfaces die sommigen misschien verkiezen.
Achter de schermen, wanneer u een webpagina downloadt, treedt het HTTP-protocol in actie. Een GET-verzoek wordt naar de server gezonden, en als alles goed gaat, reageert de server met de inhoud ingepakt in een HTTP-antwoord.