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

Dans le monde moderne de la programmation, l'interaction avec des serveurs distants via le protocole HTTP est l'une des tâches fondamentales. Qu'il s'agisse de récupérer des données d'une API, d'envoyer un formulaire ou de télécharger un fichier, savoir travailler avec des requêtes HTTP est essentiel pour tout développeur C++. Dans cet article, nous allons voir comment créer un client HTTP complet en C++, examiner les bibliothèques populaires et les meilleures pratiques.



Pourquoi un client HTTP en C++ ?

Contrairement aux langages dotés de bibliothèques HTTP intégrées (Python, JavaScript), C++ ne dispose pas d'outil standard pour travailler avec HTTP dans sa bibliothèque standard. Cependant, ce n'est pas un problème car il existe plusieurs solutions puissantes et éprouvées :

  • libcurl — la bibliothèque la plus populaire et la plus puissante pour travailler avec les URL
  • cpprestsdk (Casablanca) — une bibliothèque asynchrone moderne de Microsoft
  • Boost.Beast — une bibliothèque basée sur Boost.Asio pour un travail de bas niveau

Dans cet article, nous nous concentrerons sur libcurl et cpprestsdk, car ce sont les solutions les plus couramment utilisées.



Bases du travail avec libcurl

libcurl est une bibliothèque éprouvée qui prend en charge de nombreux protocoles, notamment HTTP/1.1, HTTP/2, FTP et autres. Elle est écrite en C mais dispose d'excellents bindings pour C++.



Installation de libcurl

L'installation de libcurl dépend de votre système d'exploitation :

# Ubuntu/Debiansudo apt-get install libcurl4-openssl-dev

# macOS (via Homebrew)brew install curl

# Windows (via vcpkg)vcpkg install curl


Requête GET simple avec libcurl

Commençons par un exemple de base : envoyer une requête GET et recevoir la réponse :

#include <iostream>#include <curl/curl.h>#include <string>

// Fonction de rappel pour écrire les donnéessize_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { size_t totalSize = size * nmemb; output->append(static_cast<char*>(contents), totalSize); return totalSize;}

int main() { CURL* curl = curl_easy_init(); if (!curl) { std::cerr << "Erreur d'initialisation CURL" << std::endl; return 1; }

std::string response; curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { std::cerr << "Erreur de requête : " << curl_easy_strerror(res) << std::endl; } else { std::cout << "Réponse du serveur :" << std::endl; std::cout << response << std::endl; } curl_easy_cleanup(curl); return 0;}


Envoi d'une requête POST avec des données

Les requêtes POST sont utilisées pour envoyer des données au serveur. Voici un exemple avec des données JSON :

#include <iostream>#include <curl/curl.h>#include <string>

size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) { size_t totalSize = size * nmemb; output->append(static_cast<char*>(contents), totalSize); return totalSize;}

int main() { CURL* curl = curl_easy_init(); if (!curl) return 1;

std::string response; std::string jsonData = R"({"title": "foo", "body": "bar", "userId": 1})"; struct curl_slist* headers = nullptr; headers = curl_slist_append(headers, "Content-Type: application/json"); curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jsonData.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_

Blogs

Book Recommendations