You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用cpprestsdk(Casablanca)调用查询员工列表的API?

用C++结合cpprestsdk调用员工列表API的实现示例

你提到的API https://api.gm-system.net/api/authenticate/searchStaffs/searchText 用于获取员工列表,我基于你给出的代码片段补全并优化了完整的实现,确保可以正常发起请求并将结果写入文件:

#include <cpprest/http_client.h>
#include <cpprest/filestream.h>
#include <iostream>

using namespace web;
using namespace web::http;
using namespace web::http::client;
using namespace utility;
using namespace concurrency::streams;

int main() {
    try {
        // 初始化输出文件流指针
        auto fileStream = std::make_shared<ostream>();

        // 打开文件流,链式处理请求逻辑
        pplx::task<void> requestTask = fstream::open_ostream(U("results.html"))
            .then([=](ostream outFile) {
                *fileStream = outFile;

                // 初始化HTTP客户端,指向API基础地址
                http_client client(U("https://api.gm-system.net/api/authenticate/searchStaffs/"));

                // 发起GET请求到目标API路径
                return client.request(methods::GET, U("searchText"));
            })
            .then([=](http_response response) {
                // 检查响应状态码是否成功
                if (response.status_code() == status_codes::OK) {
                    // 将响应内容写入文件流
                    return response.body().read_to_end(fileStream->streambuf());
                }
                // 如果请求失败,输出错误信息
                std::cout << "Request failed with status code: " << response.status_code() << std::endl;
                return pplx::task_from_result();
            })
            .then([=](size_t bytesWritten) {
                // 关闭文件流
                return fileStream->close();
            });

        // 等待任务完成
        requestTask.wait();
        std::cout << "员工列表数据已成功写入results.html" << std::endl;
    } catch (const std::exception& e) {
        std::cout << "发生异常: " << e.what() << std::endl;
    }

    return 0;
}

关键部分说明

  • 文件流处理:使用fstream::open_ostream异步打开文件,通过任务链(then)串联后续操作,确保文件流准备好后再发起请求。
  • HTTP客户端初始化:http_client指向API的基础路径,后续请求只需拼接具体接口后缀searchText。
  • 请求与响应处理:发起GET请求(如果API需要POST或携带参数,可修改request方法的参数,比如添加请求体或查询参数),检查响应状态码后读取响应内容并写入文件。
  • 异常处理:捕获全局异常,避免程序崩溃并输出错误信息。

如果你的API需要携带查询参数(比如根据关键词搜索员工),可以修改请求部分为:

// 假设需要传入searchText参数,比如搜索"张三"
uri_builder builder(U("searchText"));
builder.append_query(U("keyword"), U("张三"));
return client.request(methods::GET, builder.to_string());

内容的提问来源于stack exchange,提问作者noyruto88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:27:57