C++怎么使用REST API_C++后端交互教程【对接】

c++ rest客户端需选对第三方库并处理异步/ssl/错误;libcurl最稳但须确保https支持,cpp-httplib轻量但无连接复用;json解析推荐nlohmann/json并严格校验结构。

C++怎么使用REST API_C++后端交互教程【对接】

C++ 本身没有内置的 REST 客户端,得靠第三方库;不选对库或不处理好异步/SSL/错误,接口调用大概率卡死、崩溃或返回乱码。

libcurl 发 GET 请求最稳,但默认不支持 HTTPS(没编译 SSL)会直接失败

绝大多数生产环境要走 https://,而系统自带的 libcurl(比如 CentOS 默认装的)常被编译成不带 OpenSSL 或 mbedtls 支持。运行时调 curl_easy_perform() 可能静默返回 CURLE_UNSUPPORTED_PROTOCOL,或者报错 SSL connect error

  • 先检查:运行 curl --version,看输出里有没有 HTTPS 或具体 SSL 库名(如 OpenSSL/1.1.1w
  • 没 HTTPS 支持?别硬改代码——重装带 SSL 的 libcurl(Ubuntu:用 apt install libcurl4-openssl-dev;macOS:用 brew install curl-openssl && brew link --force curl-openssl
  • 代码里必须显式调 curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0L) 关证书校验(仅测试用),否则自签名或内网证书会触发 CURLE_SSL_CACERT
  • 别忘了设 CURLOPT_TIMEOUTCURLOPT_CONNECTTIMEOUT,否则 DNS 卡住或服务不可达时线程会挂住几十秒

cpp-httplib 适合小项目,但默认不并发,多请求串行跑会拖慢整体响应

这个 header-only 库写法清爽,httplib::Client 构造即连接,.Get() 阻塞直到响应收完。它不管理连接池,也不复用 TCP 连接——每个请求都新建 socket,三次握手 + TLS 握手全来一遍。

  • 高频调用(比如每秒 10+ 次)时,延迟飙升,CPU 花在握手而非业务上
  • 解决办法只有两个:httplib::Client 复用实例(别每次 new)、手动开 httplib::Client::enable_server_certificate_verification(false)(同上,仅调试)
  • 如果需要并发请求,别自己加线程扔一堆 Client 实例——改用 libcurl + multi interface,或切到 boost.beast
  • 示例里常见漏掉 res->body 判空,实际返回可能是空字符串或重定向响应,直接 json::parse() 会 throw

JSON 解析别手写,nlohmann/json 是目前 C++ 里最省心的选项

std::string 拼接字段、find() 找引号、substr() 截取——这种写法在字段嵌套两层以上就崩,且完全不校验格式。而 nlohmann/jsonstd::string_view 友好,支持隐式转换,报错信息也清楚。

立即学习C++免费学习笔记(深入)”;

  • 读取响应体后,第一行就该是 auto j = json::parse(body, nullptr, false);(第三个参数 false 表示不 throw,出错返回 json::value_t::discarded
  • 访问字段前务必用 j.contains("data") && j["data"].is_object() 套两层判断,HTTP 返回成功不等于 JSON 结构符合预期
  • 别把 json::object 直接传给日志函数——它可能含二进制或控制字符,打出来终端乱码甚至卡死,先转 j.dump() 再截断长度
  • 注意 nlohmann/json 默认最大嵌套深度是 100,超深 JSON(如某些配置导出)会报 parse_error,需提前调 json::max_size(200)

真正麻烦的从来不是“怎么发个请求”,而是错误路径覆盖不全:DNS 失败、连接被 reset、TLS 版本不匹配、响应体截断、JSON 字段类型突变、服务端限流返回 429 却没重试逻辑……这些点单测很难打全,上线后才暴露。