如何用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
相关产品推荐
相关产品推荐

