O que é libcurl e para que serve
\n\nlibcurl é 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\nPara 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
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\nInstalação do libcurl para C++
\n\nAo 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\nInstalação no Linux (Ubuntu/Debian)
\nsudo apt update\nsudo apt install libcurl4-openssl-dev\nPara outras distribuições (Fedora, CentOS, Arch), use os gerenciadores de pacotes correspondentes (dnf, yum, pacman).
\n\nInstalação no macOS
\nbrew install curl\n\nInstalação no Windows
\nA maneira mais simples é usar o vcpkg:
\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n.\\bootstrap-vcpkg.bat\n.\\vcpkg integrate install\n.\\vcpkg install curl\nOu baixe os binários pré-compilados do site oficial do curl.
\n\nVinculação no projeto CMake
\nfind_package(CURL REQUIRED)\ntarget_link_libraries(seu_projeto PRIVATE CURL::libcurl)\n\nInício rápido: requisição HTTP GET simples
\n\nVamos 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\nCompilação:
\ng++ -o http_client http_cl