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