0

0

C++如何调用RESTful API?cpprestsdk (Casablanca)使用教程【网络编程】

尼克

尼克

发布时间:2025-12-20 09:06:07

|

860人浏览过

|

来源于php中文网

原创

cpprestsdk是C++调用RESTful API最成熟跨平台方案,支持异步、HTTP客户端、JSON解析和URI处理;推荐vcpkg安装,Windows用cpprestsdk:x64-windows,Linux/macOS用x64-linux/x64-osx;示例通过http_client发起GET请求并解析JSON响应。

c++如何调用restful api?cpprestsdk (casablanca)使用教程【网络编程】

用 C++ 调用 RESTful API,cpprestsdk(Casablanca) 是目前最成熟、跨平台、原生支持异步的官方推荐方案。它封装了 HTTP 客户端、JSON 解析、URI 处理等能力,无需手动拼接 HTTP 报文或解析 JSON 字符串。

安装 cpprestsdk(Windows / Linux / macOS)

官方推荐通过 vcpkg 管理依赖,避免编译复杂性:

  • Windows(Visual Studio):vcpkg install cpprestsdk:x64-windows,然后在 CMake 或 VS 项目中启用 vcpkg 集成
  • Linux/macOS:vcpkg install cpprestsdk:x64-linux(或 x64-osx),导出为 system port 或使用 -DCMAKE_TOOLCHAIN_FILE

若需源码编译,注意开启 BUILD_TESTS=OFFBUILD_SAMPLES=OFF 加速构建,并确保已安装 OpenSSL、Boost(部分版本可选)、CMake 3.15+。

发起 GET 请求并解析 JSON 响应

以下是最简可用示例:获取 https://httpbin.org/get 并打印 query 参数回显:

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

#include 
#include 
#include 

using namespace web;
using namespace web::http;
using namespace web::http::client;
using json = web::json::value;

int main() {
    http_client client(U("https://httpbin.org"));
    auto resp = client.request(methods::GET, U("/get")).get();
    
    if (resp.status_code() == status_codes::OK) {
        auto body = resp.extract_json().get();
        std::wcout << L"Origin: " << body[U("origin")].as_string() << std::endl;
    }
}

关键点:

Intermediate Perl 电子书 chm版
Intermediate Perl 电子书 chm版

从一个Perl爱好者到一个Perl程序员。《Intermediate Perl》将教您如何把Perl作为编程语言来使用,而不仅只是作为一种脚本语言。   Perl是一种灵活多变、功能强大的编程语言,可以应用在从系统管理到网络编程再到数据库操作等很多方面。人们常说Perl让容易的事情变简单、让困难的事情变得可行。《Intermediate Perl》正是关于如何将技能从处理简单任务跃升到胜任困难任务的书籍。   本书提供对Perl中级编程优雅而仔细的介绍。由畅销的《学习Perl》作者所著,本书提供了《学习P

下载
  • http_client 构造时传入 base URI(不含路径),路径在 request() 中指定
  • get() 是同步阻塞调用;如需异步,用 then() 链式处理
  • extract_json() 自动识别 Content-Type 并解析;失败会抛异常,建议加 try/catch

发送 POST 请求(JSON Body + Headers)

向 API 提交结构化数据,例如登录请求:

json::value creds;
creds[U("username")] = json::value::string(U("alice"));
creds[U("password")] = json::value::string(U("secret123"));

http_request req(methods::POST);
req.set_request_uri(U("/login"));
req.set_body(creds);
req.headers().add(U("Content-Type"), U("application/json"));
req.headers().add(U("User-Agent"), U("MyCppApp/1.0"));

auto resp = client.request(req).get();

注意细节:

  • http_request 手动构造更灵活,适合设置 header、body、method 组合
  • JSON 字符串值必须用 json::value::string() 包装,不能直接写 L"xxx"
  • 中文等 Unicode 字符默认 UTF-8 编码,无需额外转码

错误处理与超时控制

网络请求必须考虑失败场景。cpprestsdk 默认无超时,需显式配置:

http_client_config config;
config.set_timeout(std::chrono::seconds(10)); // 全局超时
http_client client(U("https://api.example.com"), config);

try {
    auto resp = client.request(methods::GET, U("/data")).get();
    if (resp.status_code() >= 400) {
        auto err = resp.extract_string().get();
        std::wcerr << L"HTTP Error " << resp.status_code() << L": " << err << std::endl;
    }
} catch (const http_exception& e) {
    std::wcerr << L"Network or protocol error: " << e.what() << std::endl;
} catch (const std::exception& e) {
    std::wcerr << L"General error: " << e.what() << std::endl;
}

常见异常类型:

  • http_exception:连接失败、DNS 解析失败、SSL 握手失败等底层错误
  • std::exception 及其子类:JSON 解析失败、内存不足、URI 格式错误等
  • HTTP 状态码 4xx/5xx 不抛异常,需手动检查 status_code()

基本上就这些。cpprestsdk 上手略重于 curl + jsoncpp 组合,但胜在统一抽象、线程安全、异步友好,适合中大型 C++ 网络客户端项目。实际使用中记得始终处理异常、设置合理超时、验证 JSON 字段存在性(用 has_field()),避免崩溃。

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

146

2025.11.26

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

412

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

318

2023.08.02

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

426

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

175

2023.10.30

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号