- Notifications
You must be signed in to change notification settings - Fork17
An fast asynchronous Rust HTTP/WebSocket Client with TLS/JA3/JA4/HTTP2 fingerprint impersonate
License
0x676e67/rquest-deprecated
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
The project has been moved to:https://github.com/0x676e67/rquest
An fast asynchronous RustHTTP
/WebSocket
Client withTLS
/JA3
/JA4
/HTTP2
fingerprint impersonate
Async
Client- Plain, JSON, urlencoded, multipart bodies
- Headers Order
- Customizable redirect policy
- Cookie Store
HTTP
/WebSocket
ProxiesHTTPS
/WebSocket
via BoringSSL- Preconfigured
TLS
/HTTP2
/Headers
settings - Changelog
Additional learning resources include:
This asynchronous example usesTokio and enables someoptional features, so yourCargo.toml
could look like this:
HTTP
[dependencies]tokio = {version ="1",features = ["full"] }rquest ="0.20"
use std::error::Error;use rquest::tls::Impersonate;#[tokio::main]asyncfnmain() ->Result<(),Box<dynError>>{// Build a client to mimic Chrome128let client = rquest::Client::builder().impersonate(Impersonate::Chrome128).enable_ech_grease().permute_extensions().cookie_store(true).build()?;// Use the API you're already familiar withlet resp = client.get("https://tls.peet.ws/api/all").send().await?;println!("{}", resp.text().await?);Ok(())}
WebSocket
[dependencies]tokio = {version ="1",features = ["full"] }rquest = {version ="0.20",features = ["websocket"] }
use futures_util::{SinkExt,StreamExt,TryStreamExt};use rquest::{tls::Impersonate,Client,Message};use std::error::Error;#[tokio::main(flavor ="current_thread")]asyncfnmain() ->Result<(),Box<dynError>>{let websocket = rquest::websocket("wss://echo.websocket.org").await?;let(mut tx,mut rx) = websocket.split(); tokio::spawn(asyncmove{for iin1..11{ tx.send(Message::Text(format!("Hello, World! #{i}"))).await.unwrap();}});whileletSome(message) = rx.try_next().await?{match message{Message::Text(text) =>println!("received: {text}"), _ =>{}}}Ok(())}
PreconfiguredTLS
/HTTP2
[dependencies]tokio = {version ="1",features = ["full"] }rquest ="0.20"
use boring::ssl::{SslConnector,SslMethod};use http::HeaderValue;use rquest::{ tls::{Http2FrameSettings,TlsExtensionSettings,TlsSettings},HttpVersionPref,};use rquest::{PseudoOrder,SettingsOrder};use std::error::Error;#[tokio::main]asyncfnmain() ->Result<(),Box<dynError>>{// Create a pre-configured TLS settingslet settings =TlsSettings::builder().builder(SslConnector::builder(SslMethod::tls_client())?).extension(TlsExtensionSettings::builder().tls_sni(true).http_version_pref(HttpVersionPref::All).application_settings(true).pre_shared_key(true).enable_ech_grease(true).permute_extensions(true).build(),).http2(Http2FrameSettings::builder().initial_stream_window_size(6291456).initial_connection_window_size(15728640).max_concurrent_streams(1000).max_header_list_size(262144).header_table_size(65536).enable_push(None).headers_priority((0,255,true)).headers_pseudo_order([PseudoOrder::Method,PseudoOrder::Scheme,PseudoOrder::Authority,PseudoOrder::Path,]).settings_order([SettingsOrder::InitialWindowSize,SettingsOrder::MaxConcurrentStreams,]).build(),).build();// Build a client with pre-configured TLS settingslet client = rquest::Client::builder().use_preconfigured_tls(settings, |headers|{ headers.insert("user-agent",HeaderValue::from_static("rquest"));}).enable_ech_grease().permute_extensions().build()?;// Use the API you're already familiar withlet resp = client.get("https://tls.peet.ws/api/all").send().await?;println!("{}", resp.text().await?);Ok(())}
Install the environment required to buildBoringSSL
Do not compile with crates that depend on OpenSSL; their prefixing symbols are the same and may cause linkingfailures.
If you would like to submit your contribution, please open aPull Request.
Your question might already be answered on theissues
Apache-2.0LICENSE
The project is based on a fork ofreqwest.
About
An fast asynchronous Rust HTTP/WebSocket Client with TLS/JA3/JA4/HTTP2 fingerprint impersonate