Extension for reqwest
to allow websocket connections.
This crate contains the extension trait RequestBuilderExt
which adds an upgrade
method to reqwest::ReqestBuilder
that will prepare the HTTP request
to upgrade the connection to a WebSocket. After you call upgrade()
, you can send your upgraded request like usual with send()
which will return an UpgradeResponse
. The UpgradeResponse
wraps reqwest::Response
(and also dereferences to it), so you can inspect the response if you need to. Finally you can
use into_websocket()
on the response to turn it into a async stream and sink for messages. Both text and binary messages are supported.
For a full example take a look at hello_world.rs
.
// extends the reqwest::RequestBuilder to allow websocket upgrades
use reqwest_websocket::RequestBuilderExt;
// create a GET request, upgrade it and send it.
let response = Client::default()
.get("wss://echo.websocket.org/")
.upgrade() // <-- prepares the websocket upgrade.
.send()
.await?;
// turn the response into a websocket stream
let mut websocket = response.into_websocket().await?;
// the websocket implements `Sink<Message>`.
websocket.send(Message::Text("Hello, World".into())).await?;
// the websocket is also a `TryStream` over `Message`s.
while let Some(message) = websocket.try_next().await? {
match message {
Message::Text(text) => println!("{text}"),
_ => {}
}
}
reqwest-websocket
uses the HTTP upgrade functionality built in in reqwest
, which is not available on WebAssembly.
When you use reqwest-websocket
in WebAssembly, it falls back to using web_sys::WebSocket
. That means that everything except URL (including query parameters) is not used for your request.