如何在beast::websocket中获取客户端发送的请求路径
Boost.Beast WebSocket 服务端获取请求路径方法
你使用的官方异步WebSocket服务端示例中,WebSocket连接建立前会先收到客户端的HTTP升级请求,直接从该请求对象即可提取完整的请求路径和查询参数,操作步骤如下:
- 找到代码中调用
websocket::stream::async_accept执行握手的逻辑位置,此处你已经持有http::request<http::string_body>类型的HTTP请求对象(示例默认变量名为req) - 调用请求对象的
target()方法即可直接获取完整的请求URI(包含路径和查询参数):
示例代码:std::string request_uri = req.target();
当客户端请求地址为ws://mydomain.com/some_operation?channel=XXX时,上述代码拿到的request_uri值为/some_operation?channel=XXX - 如果你需要拆分路径和查询参数,可以用Boost.Beast自带的URL解析工具处理:
#include <boost/beast/http/url.hpp> // 解析请求URI boost::beast::http::url parsed_url(req.target()); // 提取纯路径(不含查询参数) std::string request_path = parsed_url.path(); // 提取指定查询参数,例如channel std::string channel_value = parsed_url.params().get("channel").value_or("default_channel"); - 你可以在握手前先判断路径是否合法,也可以将解析得到的路径、参数传入后续WebSocket会话的业务逻辑中,实现不同请求路径的分发处理。
内容的提问来源于stack exchange,提问作者Carlos Lobo
相关产品推荐
相关产品推荐

