libcurl for C++: 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 libcurl 以及为什么需要它

\n\n

libcurl 是一个强大且广泛使用的跨平台数据传输库,支持多种网络协议。它用 C 语言编写,为 C++ 提供了接口(通常称为 curlpp 或 libcurl 的封装),用于执行 HTTP 请求、文件下载、与 FTP、SMTP 以及许多其他协议交互。在 C++ 环境中,libcurl 是创建 HTTP 客户端的事实标准。

\n\n

为什么在 C++ 中需要 libcurl?

\n
    \n
  • 与 REST API 交互: 向 Web 服务发送 GET、POST、PUT、DELETE 请求。
  • \n
  • 文件下载: 从互联网下载图片、文档、压缩包。
  • \n
  • 数据发送: 将文件上传到服务器、提交表单。
  • \n
  • 网页抓取: 获取 HTML 代码以供进一步分析。
  • \n
  • 身份验证: 支持 Basic、Digest、OAuth、NTLM 等方案。
  • \n
  • Cookie 管理: 管理会话和状态。
  • \n
  • SSL/TLS: 通过 HTTPS 实现安全连接。
  • \n
\n\n

该库具有高性能、稳定性,并支持几乎所有现代网络协议。它被用于 cURL(命令行)、PHP(cURL 扩展)等众多项目中。

\n\n

为 C++ 安装 libcurl

\n\n

与 Python 或 JavaScript 不同,C++ 没有统一的包管理器,因此安装取决于您的操作系统和编译器。

\n\n

在 Linux 上安装 (Ubuntu/Debian)

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

对于其他发行版(Fedora、CentOS、Arch),请使用相应的包管理器(dnf、yum、pacman)。

\n\n

在 macOS 上安装

\n
brew install curl
\n\n

在 Windows 上安装

\n

最简单的方法是使用 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

或者从 curl 官方网站 下载预编译的二进制文件。

\n\n

在 CMake 项目中链接

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

快速入门:简单的 HTTP GET 请求

\n\n

让我们编写一个最简单的程序,向网站发送 GET 请求并输出返回的数据。

\n\n
#include <iostream>\n#include <string>\n#include <curl/curl.h>\n\n// 用于将数据写入字符串的回调函数\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        // 执行请求\n        res = curl_easy_perform(curl);\n        \n        if (res != CURLE_OK) {\n            std::cerr << "错误: " << curl_easy_strerror(res) << std::endl;\n        } else {\n            std::cout << "服务器响应:" << 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

编译:

\n
g++ -o http_client http_cl                    

推荐