libcurl pour C++ : guide complet avec exemples

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

Qu'est-ce que libcurl et pourquoi l'utiliser ?

libcurl est une bibliothèque multiplateforme puissante et largement utilisée pour le transfert de données via divers protocoles réseau. Écrite en C, elle offre une interface C++ (souvent appelée curlpp ou simplement un wrapper libcurl) pour effectuer des requêtes HTTP, télécharger des fichiers, travailler avec FTP, SMTP et de nombreux autres protocoles. Dans le contexte du C++, libcurl est la référence de facto pour créer des clients HTTP.

Pourquoi utiliser libcurl en C++ ?

  • Interaction avec les API REST : Envoi de requêtes GET, POST, PUT, DELETE vers des services web.
  • Téléchargement de fichiers : Récupération d'images, documents, archives depuis Internet.
  • Envoi de données : Upload de fichiers vers un serveur, soumission de formulaires.
  • Extraction de contenu web : Obtention de code HTML pour analyse ultérieure.
  • Authentification : Prise en charge des schémas Basic, Digest, OAuth, NTLM et autres.
  • Gestion des cookies : Contrôle des sessions et de l'état.
  • SSL/TLS : Connexion sécurisée via HTTPS.

Cette bibliothèque se distingue par ses hautes performances, sa stabilité et sa prise en charge de pratiquement tous les protocoles réseau modernes. Elle est utilisée dans des projets tels que cURL (ligne de commande), PHP (extension cURL), et bien d'autres.

Installation de libcurl pour C++

Contrairement à Python ou JavaScript, le C++ ne dispose pas d'un gestionnaire de paquets unique. L'installation dépend donc de votre système d'exploitation et de votre compilateur.

Installation sur Linux (Ubuntu/Debian)

sudo apt update
sudo apt install libcurl4-openssl-dev

Pour les autres distributions (Fedora, CentOS, Arch), utilisez les gestionnaires de paquets correspondants (dnf, yum, pacman).

Installation sur macOS

brew install curl

Installation sur Windows

La méthode la plus simple consiste à utiliser vcpkg :

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg integrate install
.\vcpkg install curl

Vous pouvez également télécharger les binaires précompilés depuis le site officiel de curl.

Intégration dans un projet CMake

find_package(CURL REQUIRED)
target_link_libraries(votre_projet PRIVATE CURL::libcurl)

Démarrage rapide : une simple requête HTTP GET

Écrivons un programme simple qui effectue une requête GET vers un site et affiche les données reçues.

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

// Fonction de rappel pour écrire les données dans une chaîne
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;
    CURLcode res;
    std::string response;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();

    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://api.github.com");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
        // Exécution de la requête
        res = curl_easy_perform(curl);
        
        if (res != CURLE_OK) {
            std::cerr << "Erreur : " << curl_easy_strerror(res) << std::endl;
        } else {
            std::cout << "Réponse du serveur :" << std::endl;
            std::cout << response << std::endl;
        }
        
        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();
    return 0;
}

Compilation :

g++ -o http_client http_client.cpp -lcurl

Méthodes/fonctions principales de libcurl

1. curl_easy_in

Recommendations