Client HTTP en C++ : faire des requêtes correctement de A à Z

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client HTTP en C++ : faire des requêtes correctement de A à Z

\n\n

Dans le monde moderne du développement logiciel, savoir interagir avec des serveurs distants via HTTP est une compétence de base. Qu'il s'agisse de télécharger des données depuis une API, d'envoyer des formulaires ou de travailler avec des services web, C++ offre plusieurs outils puissants pour créer des clients HTTP. Dans cet article, nous allons voir comment effectuer correctement des requêtes HTTP en C++, examiner les bibliothèques populaires et écrire des exemples de code fonctionnels.

\n\n

Pourquoi C++ pour les requêtes HTTP ?

\n\n

C++ ne dispose pas de support HTTP intégré dans sa bibliothèque standard, contrairement à Python ou JavaScript. Cependant, ce n'est pas un problème : il existe des bibliothèques éprouvées qui permettent d'envoyer des requêtes facilement et efficacement. Les principales options sont :

\n\n
    \n
  • libcurl (cURL) — la bibliothèque multiplateforme la plus populaire.
  • \n
  • Boost.Beast — une bibliothèque moderne basée sur Boost.Asio.
  • \n
  • WinHTTP — une solution intégrée pour Windows.
  • \n
  • Qt Network — pour les projets basés sur Qt.
  • \n
\n\n

Dans cet article, nous nous concentrerons sur les deux premières, car elles sont les plus polyvalentes et conviennent à la plupart des tâches.

\n\n

1. Client HTTP avec libcurl

\n\n

libcurl est une bibliothèque éprouvée qui prend en charge HTTP, HTTPS, FTP et de nombreux autres protocoles. Elle est simple à utiliser et bien documentée.

\n\n

Installation de libcurl

\n\n

Pour Linux (Ubuntu/Debian) :

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

Pour Windows, vous pouvez télécharger les binaires précompilés depuis le site officiel curl.se ou utiliser vcpkg :

\n
vcpkg install curl
\n\n

Requête GET simple

\n\n

Écrivons un exemple de base pour récupérer des données depuis un serveur :

\n\n
#include <iostream>\n#include <string>\n#include <curl/curl.h>\n\n// Fonction de rappel pour écrire les données\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 << "Erreur d'initialisation CURL" << 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); // Désactive la vérification SSL pour le test\n\n    CURLcode res = curl_easy_perform(curl);\n    if (res != CURLE_OK) {\n        std::cerr << "Erreur de requête : " << curl_easy_strerror(res) << std::endl;\n    } else {\n        std::cout << "Réponse du serveur :\\n" << response << std::endl;\n    }\n\n    curl_easy_cleanup(curl);\n    return 0;\n}
\n\n

Compilez avec le drapeau -lcurl :

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

Requête POST avec envoi de JSON

\n\n

Ajoutons maintenant l'envoi de données :

\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

Book Recommendations