HTTP-Client für C++: Überblick über die besten Bibliotheken
Bei der Entwicklung moderner Anwendungen in C++ besteht häufig die Notwendigkeit, mit Webservern über das HTTP-Protokoll zu interagieren. Ob es um das Herunterladen von Daten von einer API, das Senden von Formularen oder den Austausch von JSON-Nachrichten geht – ohne einen zuverlässigen HTTP-Client geht es nicht. Im Gegensatz zu vielen modernen Sprachen enthält die Standardbibliothek von C++ keine integrierten Mittel für die Arbeit mit HTTP. Glücklicherweise gibt es mehrere ausgereifte und leistungsstarke Bibliotheken, die diese Aufgabe lösen. In diesem Artikel betrachten wir vier der besten HTTP-Clients für C++, vergleichen ihre Eigenschaften und geben praktische Beispiele.
1. libcurl (cURL)
libcurl ist wohl die bekannteste und am meisten bewährte Bibliothek für die Datenübertragung über verschiedene Protokolle, einschließlich HTTP/1.1 und HTTP/2. Sie ist in C geschrieben, hat aber hervorragende Wrapper für C++ (z. B. curlpp). libcurl wird in Tausenden von Projekten eingesetzt, von eingebetteten Systemen bis hin zu Serveranwendungen.
Wichtige Merkmale:
- Unterstützung für HTTP, HTTPS, FTP, SMTP und viele andere Protokolle.
- Arbeit mit SSL/TLS (OpenSSL, Schannel, NSS).
- Asynchrone Anfragen über die
multi-Schnittstelle. - Flexible Konfiguration von Headern, Cookies, Proxys, Timeouts.
- Plattformunabhängigkeit (Windows, Linux, macOS, mobile Betriebssysteme).
Einfaches Beispiel einer GET-Anfrage mit dem C++-Wrapper curlpp:
#include <curlpp/cURLpp.hpp>#include <curlpp/Easy.hpp>#include <sstream>
int main() { try { curlpp::Cleanup cleaner; curlpp::Easy request;
// URL konfigurieren request.setOpt(new curlpp::options::Url("https://api.example.com/data"));
// Antwort in einen String-Stream schreiben std::ostringstream response; request.setOpt(new curlpp::options::WriteStream(&response));
// Anfrage ausführen request.perform();
std::cout << "Antwort: " << response.str() << std::endl; } catch (curlpp::RuntimeError & e) { std::cerr << "Fehler: " << e.what() << std::endl; } return 0;}2. C++ REST SDK (cpprestsdk)
C++ REST SDK (früher bekannt als Casablanca) ist eine asynchrone Bibliothek von Microsoft, die auf die Arbeit mit RESTful-Diensten ausgerichtet ist. Sie bietet eine benutzerfreundliche Schnittstelle auf Basis von pplx::task (ein Analogon zu C++ std::future), was das Schreiben von nicht-blockierendem Code vereinfacht.
Wichtige Merkmale:
- Vollständige Asynchronität auf Basis von
taskundcontinuation. - Integrierte JSON-Unterstützung (cpprest/json.h).
- WebSocket-Client.
- Arbeit mit HTTP/HTTPS, Autorisierung (Basic, OAuth).
- Plattformunabhängigkeit (Windows, Linux, macOS).
Beispiel einer asynchronen POST-Anfrage mit JSON:
#include <cpprest/http_client.h>#include <cpprest/filestream.h>#include <cpprest/json.h>
using namespace web;using namespace web::http;using namespace web::http::client;
int main() { http_client client(U("https://api.example.com"));
// JSON-Anfragetext erstellen json::value body; body[U("name")] = json::value::string(U("John")); body[U("age")] = json::value::number(30);
// POST-Anfrage client.request(methods::POST, U("/users"), body.serialize(), U("application/json")) .then([](http_response response) { if (response.status_code() == status_codes::Created) { return response.extract_json(); } throw std::runtime_error("Anfragefehler"); }) .then([](json::value answer) { std::cout << "Antwort: " << answer.serialize() << std::endl; Auch in der Bibliothek
Bildverarbeitung in Rust: resize und crop mit image und imageproc
Reaktive Programmierung in TypeScript: Bibliothek RxJS
NestJS für JavaScript (Node.js): Komplettleitfaden mit Beispielen
Aufgabenwarteschlangen für TypeScript: Bull, Bee-Queue und asynchrone Verarbeitung
lo für Go: Vollständige Anleitung mit Beispielen