Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
This repository was archived by the owner on Feb 7, 2025. It is now read-only.

An fast asynchronous Rust HTTP/WebSocket Client with TLS/JA3/JA4/HTTP2 fingerprint impersonate

License

NotificationsYou must be signed in to change notification settings

0x676e67/rquest-deprecated

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rquest

Email BadgeCrates.io Licensecrates.ioDocumentationCrates.io Total Downloads

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 Proxies
  • HTTPS/WebSocket via BoringSSL
  • PreconfiguredTLS/HTTP2/Headers settings
  • Changelog

Additional learning resources include:

Usage

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(())}

Requirement

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.

Contributing

If you would like to submit your contribution, please open aPull Request.

Getting help

Your question might already be answered on theissues

License

Apache-2.0LICENSE

Accolades

The project is based on a fork ofreqwest.


[8]ページ先頭

©2009-2025 Movatter.jp