HTTP-Client in C++: Anfragen richtig von A bis Z stellen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

HTTP-Client in C++: Anfragen richtig von A bis Z stellen

\n\n

In der modernen Softwareentwicklung ist die Fähigkeit, über HTTP mit entfernten Servern zu interagieren, eine grundlegende Fertigkeit. Ob es um das Herunterladen von Daten von einer API, das Senden von Formularen oder die Arbeit mit Webdiensten geht – C++ bietet mehrere leistungsstarke Werkzeuge zur Erstellung von HTTP-Clients. In diesem Artikel werden wir uns ansehen, wie man HTTP-Anfragen in C++ richtig stellt, beliebte Bibliotheken betrachten und funktionierende Codebeispiele schreiben.

\n\n

Warum C++ für HTTP-Anfragen?

\n\n

C++ hat im Gegensatz zu Python oder JavaScript keine integrierte HTTP-Unterstützung in der Standardbibliothek. Dies ist jedoch kein Problem: Es gibt bewährte Bibliotheken, die das einfache und effiziente Senden von Anfragen ermöglichen. Die wichtigsten Optionen sind:

\n\n
    \n
  • libcurl (cURL) – die beliebteste plattformübergreifende Bibliothek.
  • \n
  • Boost.Beast – eine moderne Bibliothek basierend auf Boost.Asio.
  • \n
  • WinHTTP – eine integrierte Lösung für Windows.
  • \n
  • Qt Network – für Projekte mit Qt.
  • \n
\n\n

In diesem Artikel konzentrieren wir uns auf die ersten beiden, da sie am vielseitigsten sind und für die meisten Aufgaben geeignet sind.

\n\n

1. HTTP-Client mit libcurl

\n\n

libcurl ist eine seit Jahren bewährte Bibliothek, die HTTP, HTTPS, FTP und viele andere Protokolle unterstützt. Sie ist einfach zu bedienen und hervorragend dokumentiert.

\n\n

Installation von libcurl

\n\n

Für Linux (Ubuntu/Debian):

\n
sudo apt-get install libcurl4-openssl-dev
\n\n

Für Windows können Sie vorkompilierte Binärdateien von der offiziellen Website curl.se herunterladen oder vcpkg verwenden:

\n
vcpkg install curl
\n\n

Einfache GET-Anfrage

\n\n

Schreiben wir ein einfaches Beispiel zum Abrufen von Daten von einem Server:

\n\n
#include <iostream>\n#include <string>\n#include <curl/curl.h>\n\n// Callback-Funktion zum Schreiben von Daten\nstatic size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {\n    size_t totalSize = size * nmemb;\n    output->append((char*)contents, totalSize);\n    return totalSize;\n}\n\nint main() {\n    CURL* curl = curl_easy_init();\n    if (!curl) {\n        std::cerr << "Fehler bei der CURL-Initialisierung" << std::endl;\n        return 1;\n    }\n\n    std::string response;\n    curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1");\n    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);\n    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);\n    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); // SSL-Prüfung für Test deaktivieren\n\n    CURLcode res = curl_easy_perform(curl);\n    if (res != CURLE_OK) {\n        std::cerr << "Anfragefehler: " << curl_easy_strerror(res) << std::endl;\n    } else {\n        std::cout << "Serverantwort:\\n" << response << std::endl;\n    }\n\n    curl_easy_cleanup(curl);\n    return 0;\n}
\n\n

Kompilieren Sie mit dem Flag -lcurl:

\n
g++ -o http_client http_client.cpp -lcurl
\n\n

POST-Anfrage mit JSON-Sendung

\n\n

Jetzt fügen wir das Senden von Daten hinzu:

\n\n
#include <iostream>\n#include <string>\n#include <curl/curl.h>\n\nint main() {\n    CURL* curl = curl_easy_init();\n    if (!curl) return 1;\n\n    std::string response;\n    std::string jsonData = R"({"title": "foo", "body": "bar", "userId": 1})";\n\n    struct curl_slist* headers = nullptr;\n    headers = curl_slist_append(headers, "Content-Type: application/json");\n\n    curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts");\n    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str());\n    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\n    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCal                

Blogs

Buchempfehlungen