🚀 Help me work seamlessly with open source sharing by sponsoring me on GitHub
An ergonomic, all-in-one HTTP client for emulating any browser with TLS, JA3/JA4, and HTTP2 fingerprints.
- Plain, JSON, urlencoded, multipart bodies
- Header Order
- Redirect Policy
- Cookie Store
- HTTP Proxies
- WebSocket Upgrade
- HTTPS via BoringSSL
- Perfectly Chrome, Safari, and Firefox
This asynchronous example uses Tokio and enables some optional features. Your Cargo.toml
could look like this:
[dependencies]
tokio = { version = "1", features = ["full"] }
rquest = "2.0.0"
And then the code:
use rquest::{Client, Emulation};
#[tokio::main]
async fn main() -> Result<(), rquest::Error> {
// Build a client to emulation Firefox133
let client = Client::builder()
.emulation(Emulation::Firefox133)
.build()?;
// Use the API you're already familiar with
let resp = client.get("https://tls.peet.ws/api/all").send().await?;
println!("{}", resp.text().await?);
Ok(())
}
-
HTTP/2 over TLS
JA3/JA4/Akamai fingerprints cannot accurately simulate browser fingerprints due to the sophistication of TLS encryption and the popularity of HTTP/2.
rquest
does not plan to support parsing these fingerprint strings for simulation. Users are encouraged to customize the configuration according to their own needs.Note: Many
Akamai
fingerprint strings are incomplete. For example, the website lacks Priority and Stream ID in the Headers Frame, making it easy to detect. For details, refer to the HTTP/2 frame parser. -
Emulation Device
In fact, most device models have the same
TLS
/HTTP2
configuration, except that theUser-Agent
is changed.Default device emulation types
-
Chrome
Chrome100
,Chrome101
,Chrome104
,Chrome105
,Chrome106
,Chrome107
,Chrome108
,Chrome109
,Chrome114
,Chrome116
,Chrome117
,Chrome118
,Chrome119
,Chrome120
,Chrome123
,Chrome124
,Chrome126
,Chrome127
,Chrome128
,Chrome129
,Chrome130
,Chrome131
,Chrome132
,Chrome133
-
Edge
Edge101
,Edge122
,Edge127
,Edge131
-
Safari
SafariIos17_2
,SafariIos17_4_1
,SafariIos16_5
,Safari15_3
,Safari15_5
,Safari15_6_1
,Safari16
,Safari16_5
,Safari17_0
,Safari17_2_1
,Safari17_4_1
,Safari17_5
,Safari18
,SafariIPad18
,Safari18_2
,Safari18_1_1
-
OkHttp
OkHttp3_9
,OkHttp3_11
,OkHttp3_13
,OkHttp3_14
,OkHttp4_9
,OkHttp4_10
,OkHttp5
-
Firefox
Firefox109
,Firefox117
,Firefox128
,Firefox133
-
- rnet: Python HTTP client with a touch of black magic.
- ktor-impersonate: KMP Ktor engine bindings for rquest to spoof JA3/JA4/H2 fingerprints.
Do not compile with packages that depend on openssl-sys; it links with the same prefix symbol as boring-sys, which can cause link failures and other problems. Even if compilation succeeds, using both openssl-sys
and boring-sys
as dependencies can cause memory segmentation faults.
Install the dependencies required to build BoringSSL
sudo apt-get install build-essential cmake perl pkg-config libclang-dev musl-tools -y
cargo build --release
This GitHub Actions workflow can be used to compile the project on Linux, Windows, and macOS.
Released under the Apache-2.0 License.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.
Support this project by becoming a sponsor.
The project is based on a fork of reqwest.