libcurl para C++: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é libcurl e para que serve

\n\n

libcurl é uma biblioteca multiplataforma poderosa e amplamente utilizada para transferência de dados através de vários protocolos de rede. Escrita em C, ela fornece uma interface C++ (frequentemente chamada de curlpp ou apenas um wrapper libcurl) para realizar requisições HTTP, baixar arquivos, trabalhar com FTP, SMTP e muitos outros protocolos. No contexto do C++, libcurl é o padrão de facto para criar clientes HTTP.

\n\n

Para que serve libcurl em C++?

\n
    \n
  • Trabalho com REST API: Envio de requisições GET, POST, PUT, DELETE para serviços web.
  • \n
  • Download de arquivos: Baixar imagens, documentos, arquivos da internet.
  • \n
  • Envio de dados: Upload de arquivos para servidor, envio de formulários.
  • \n
  • Parsing de páginas web: Obter código HTML para análise posterior.
  • \n
  • Autenticação: Suporte a Basic, Digest, OAuth, NTLM e outros esquemas.
  • \n
  • Trabalho com cookies: Gerenciamento de sessões e estado.
  • \n
  • SSL/TLS: Conexão segura via HTTPS.
  • \n
\n\n

A biblioteca se destaca por sua alta performance, estabilidade e suporte a praticamente todos os protocolos de rede modernos. Ela é usada em projetos como cURL (linha de comando), PHP (extensão cURL) e muitos outros.

\n\n

Instalação do libcurl para C++

\n\n

Ao contrário de Python ou JavaScript, C++ não possui um gerenciador de pacotes único, portanto a instalação depende do seu sistema operacional e compilador.

\n\n

Instalação no Linux (Ubuntu/Debian)

\n
sudo apt update\nsudo apt install libcurl4-openssl-dev
\n

Para outras distribuições (Fedora, CentOS, Arch), use os gerenciadores de pacotes correspondentes (dnf, yum, pacman).

\n\n

Instalação no macOS

\n
brew install curl
\n\n

Instalação no Windows

\n

A maneira mais simples é usar o vcpkg:

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

Ou baixe os binários pré-compilados do site oficial do curl.

\n\n

Vinculação no projeto CMake

\n
find_package(CURL REQUIRED)\ntarget_link_libraries(seu_projeto PRIVATE CURL::libcurl)
\n\n

Início rápido: requisição HTTP GET simples

\n\n

Vamos escrever um programa simples que faz uma requisição GET a um site e exibe os dados recebidos.

\n\n
#include <iostream>\n#include <string>\n#include <curl/curl.h>\n\n// Função de callback para escrever dados em uma string\nsize_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {\n    size_t totalSize = size * nmemb;\n    output->append(static_cast<char*>(contents), totalSize);\n    return totalSize;\n}\n\nint main() {\n    CURL* curl;\n    CURLcode res;\n    std::string response;\n\n    curl_global_init(CURL_GLOBAL_DEFAULT);\n    curl = curl_easy_init();\n\n    if (curl) {\n        curl_easy_setopt(curl, CURLOPT_URL, "https://api.github.com");\n        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);\n        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);\n        \n        // Executa a requisição\n        res = curl_easy_perform(curl);\n        \n        if (res != CURLE_OK) {\n            std::cerr << "Erro: " << curl_easy_strerror(res) << std::endl;\n        } else {\n            std::cout << "Resposta do servidor:" << std::endl;\n            std::cout << response << std::endl;\n        }\n        \n        curl_easy_cleanup(curl);\n    }\n\n    curl_global_cleanup();\n    return 0;\n}
\n\n

Compilação:

\n
g++ -o http_client http_cl                    

Recommendations