使用C++和libcurl发起HTTP请求需四步:初始化句柄、配置选项(URL/方法/超时/回调)、执行请求并检查返回值、清理资源;重点在于正确设置选项、错误处理及内存管理。

使用 C++ 和 libcurl 发起 HTTP 请求,核心是初始化 curl 句柄、配置选项、执行请求、处理响应,最后清理资源。关键在于正确设置 URL、HTTP 方法、超时、错误检查和内存管理。
1. 安装与基础环境准备
Linux(如 Ubuntu)可直接安装开发包:
sudo apt install libcurl4-openssl-dev
macOS 使用 Homebrew:
立即学习“C++免费学习笔记(深入)”;
brew install curl
编译时链接库:g++ main.cpp -lcurl -o http_client
2. 发起简单 GET 请求
这是最常用场景,用于获取网页或 API 数据。需注意设置 CURLOPT_URL、CURLOPT_FOLLOWLOCATION(自动跳转)、CURLOPT_TIMEOUT,并提供回调函数接收响应体。
- 定义一个 std::string 全局或静态变量存储响应数据
- 编写回调函数,把接收到的 chunk 追加到该字符串中
- 用 curl_easy_setopt 设置 CURLOPT_WRITEFUNCTION 和 CURLOPT_WRITEDATA
- 调用 curl_easy_perform,检查返回值是否为 CURLE_OK
3. POST 请求与表单/JSON 数据提交
发送 POST 需明确指定方法、数据格式和内容长度(libcurl 多数情况自动处理)。常见两种方式:
- 提交表单:用 curl_slist_append 添加 "Content-Type: application/x-www-form-urlencoded",再用 CURLOPT_POSTFIELDS 传入 key=val&key2=val2 字符串
- 提交 JSON:同样设置 Content-Type 为 application/json,用 CURLOPT_POSTFIELDS 指向 JSON 字符串指针(注意生命周期)
- 若需自定义请求头(如 Authorization),用 curl_slist_append 构建头链表,再通过 CURLOPT_HTTPHEADER 设置
4. 错误处理与调试技巧
libcurl 错误不抛异常,必须主动检查返回值。常见做法:
- curl_easy_perform 返回非 CURLE_OK 时,用 curl_easy_strerror 获取可读错误信息
- 开启详细日志:设置 CURLOPT_VERBOSE 为 1L,输出完整请求/响应过程(仅调试用)
- 对 HTTPS 请求,默认启用证书验证;若需跳过(仅测试环境),设 CURLOPT_SSL_VERIFYPEER 和 CURLOPT_SSL_VERIFYHOST 为 0L
- 每次 curl_easy_init 后必须配对 curl_easy_cleanup,避免资源泄漏
不复杂但容易忽略。掌握这四点,就能稳定完成大多数 HTTP 交互任务。











