使用 libcurl 发起 HTTP 请求是 C++ 生产环境的标准方案,需正确初始化全局环境、设置 URL 和回调函数、检查返回值、配置超时与 SSL 选项,并注意 Windows 下运行时和 SSL 后端匹配。
用 libcurl 发起 GET 请求是最直接的方案
标准 C++ 没有内置 HTTP 客户端,硬写 socket + HTTP 协议解析既容易出错又无必要。生产环境几乎都用 libcurl——它稳定、跨平台、支持 HTTPS、自动处理重定向和 Cookie 等细节。
常见错误是只链接 libcurl 但没初始化全局环境,导致首次请求卡死或崩溃。必须在程序开始时调用 curl_global_init(CURL_GLOBAL_DEFAULT),结束前调用 curl_global_cleanup()。
示例关键步骤:
- 调用
curl_easy_init()获取句柄 - 用
curl_easy_setopt(handle, CURLOPT_URL, "https://httpbin.org/get")设置目标 URL - 用
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_callback)指定数据接收回调(不能用std::string成员函数作回调,得是自由函数或 static 成员) - 调用
curl_easy_perform()执行,返回值为CURLE_OK才算成功
POST 请求要手动设置 CURLOPT_POSTFIELDS 或 CURLOPT_HTTPPOST
CURLOPT_POSTFIELDS 最适合发送纯文本 body(如 JSON),但注意:它会自动添加 Content-Type: application/x-www-form-urlencoded,如果发 JSON,必须显式覆盖:curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers),其中 headers 是 struct curl_slist*,包含 "Content-Type: application/json"。
立即学习“C++免费学习笔记(深入)”;
若需上传文件或混合字段(如表单含文件+文本),必须用 CURLOPT_HTTPPOST 配合 curl_httppost 相关 API,否则字段会被忽略或编码错误。
容易踩的坑: