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

如何为cpprestsdk的HTTP客户端请求添加超时功能?

解决cpprestsdk HTTP请求超时问题

你的代码中调用response_task.get()会阻塞当前线程直至请求完成,若服务无响应会一直等待。要解决这个问题,核心是通过http_client_config配置请求超时时间,具体步骤如下:

1. 配置http_client_config的超时参数

创建http_client_config实例,调用set_timeout()方法设置超时时长(单位为秒),再将该配置传入http_client的构造函数。当请求总耗时超过设定值时,会自动终止并抛出超时异常。

2. 修改后的完整代码示例

utility::string_t url = U("http://localhost:8080/api/v1/post_info");
web::uri uri1(url);

// 配置客户端超时
web::http::client::http_client_config config;
config.set_timeout(utility::seconds(10)); // 设置10秒超时

web::http::client::http_client client(uri1, config); // 传入配置
web::http::http_request request;
pplx::task<web::http::http_response> response_task;
web::http::http_response response;

request.set_method(web::http::methods::POST);
request.set_body(jsondata);

try {
    response_task = client.request(request);
    response = response_task.get();
    // 处理正常响应
} catch (const std::exception& e) {
    // 捕获超时或其他请求异常
    std::cout << "请求出错: " << e.what() << std::endl;
}

关于timeout()方法的说明

  • http_client_config::timeout()用于获取当前设置的超时时长,对应的set_timeout()用于设置超时,单位是utility::seconds(秒)。
  • 该超时是请求的总时长限制,涵盖TCP连接建立、请求发送、响应接收的全部过程,并非单独某一步的超时。
  • 超时发生时,client.request()会抛出web::http::http_exception或派生异常,需通过try-catch块捕获处理,避免程序长时间阻塞或崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:30:47