Hier ist meine minimale Wrapper um cURL, um einfach eine Webseite als Zeichenfolge abzurufen. Dies ist nützlich, zum Beispiel für Unittests. Es handelt sich im Grunde um einen RAII-Wrapper um den C-Code.
Installieren Sie "libcurl" auf Ihrem Gerät yum install libcurl libcurl-devel
oder Ähnliches.
Beispiel für die Verwendung:
CURLplusplus client;
string x = client.Get("http://google.com");
string y = client.Get("http://yahoo.com");
Implementierung der Klasse:
#include
class CURLplusplus
{
private:
CURL* curl;
stringstream ss;
long http_code;
public:
CURLplusplus()
: curl(curl_easy_init())
, http_code(0)
{
}
~CURLplusplus()
{
if (curl) curl_easy_cleanup(curl);
}
std::string Get(const std::string& url)
{
CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
ss.str("");
http_code = 0;
res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
throw std::runtime_error(curl_easy_strerror(res));
}
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);
return ss.str();
}
long GetHttpCode()
{
return http_code;
}
private:
static size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp)
{
return static_cast(userp)->Write(buffer,size,nmemb);
}
size_t Write(void *buffer, size_t size, size_t nmemb)
{
ss.write((const char*)buffer,size*nmemb);
return size*nmemb;
}
};
2 Stimmen
Nein, derzeit gibt es keine integrierte Unterstützung entweder über die Sprache oder die Standardbibliothek für Netzwerke. Es gibt jedoch einen Networking TS N4370. Ich habe auch für diese Frage gestimmt, da sie Bibliotheksempfehlungen anzieht.
0 Stimmen
Wie wäre es mit BoostBeast?
3 Stimmen
@user3920237 Glücklicherweise denken die meisten Menschen nicht destruktiv, um die nützliche Frage zu VTC. Diese sind für den Gebrauch der Menschen gemacht, sei es Bibliothek.