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

如何使用tungstenite-rs设置自定义HTTP请求头?

在WebSocket握手阶段设置自定义HTTP请求头的实现方案

针对Rust生态中常见的WebSocket客户端库,以下是在握手请求阶段添加自定义HTTP头的具体实现:

使用tokio-tungstenite

通过将URL转换为请求对象,直接修改请求头后再发起连接:

use tokio_tungstenite::connect_async;
use tokio_tungstenite::tungstenite::client::IntoClientRequest;
use hyper::header::{HeaderName, HeaderValue};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 将目标WebSocket地址转为请求对象
    let mut request = "wss://your-websocket-endpoint.com/ws".into_client_request()?;
    
    // 插入自定义HTTP请求头
    request.headers_mut().insert(
        HeaderName::from_static("x-custom-header"),
        HeaderValue::from_static("your-custom-value"),
    );

    // 发起带自定义头的WebSocket连接
    let (ws_stream, response) = connect_async(request).await?;
    println!("握手完成,响应状态码: {}", response.status());

    // 后续处理WebSocket消息逻辑
    Ok(())
}

使用websocket-rs

利用客户端构建器的add_header方法直接添加自定义头:

use websocket::ClientBuilder;
use websocket::header::{HeaderName, HeaderValue};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut client_builder = ClientBuilder::new("wss://your-websocket-endpoint.com/ws")?;
    
    // 添加自定义请求头
    client_builder.add_header(
        HeaderName::from_static("x-custom-header"),
        HeaderValue::from_static("your-custom-value")
    );

    // 建立连接(根据需求选择connect或connect_insecure)
    let (mut receiver, mut sender) = client_builder.connect_insecure()?;
    println!("WebSocket连接成功");

    // 后续消息收发逻辑
    Ok(())
}

注意事项

  • 自定义头的名称需符合HTTP规范,避免使用Host、Upgrade等WebSocket握手保留字段。
  • 若目标服务存在CORS限制,需确保自定义头被允许在预检请求中通过。
  • 不同WebSocket库的API细节可能不同,核心思路都是在发起握手请求前修改HTTP请求头对象,可重点查看对应库的ClientBuilder或请求对象的文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:03