{"id":23122491,"url":"https://github.com/0x676e67/rquest-deprecated","last_synced_at":"2025-08-17T01:32:17.632Z","repository":{"id":271667802,"uuid":"651121363","full_name":"0x676e67/rquest-deprecated","owner":"0x676e67","description":"An fast asynchronous Rust HTTP/WebSocket Client with TLS/JA3/JA4/HTTP2 fingerprint impersonate","archived":true,"fork":false,"pushed_at":"2025-01-28T03:04:15.000Z","size":2686,"stargazers_count":116,"open_issues_count":0,"forks_count":17,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-08-13T18:10:53.786Z","etag":null,"topics":["akamai-fingerprint","client","fingerprint","http","http-client","http2","http2-fingerprint","https","impersonate","ja3","ja3-fingerprint","ja4","ja4-fingerprint","proxy","tls-fingerprint","websocket"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0x676e67.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":["https://github.com/0x676e67/0x676e67/blob/main/SPONSOR.md#sponsor-my-open-source-works"]}},"created_at":"2023-06-08T14:39:31.000Z","updated_at":"2025-05-25T12:05:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"6871e28b-1587-4e19-926f-fb5f190bb0ef","html_url":"https://github.com/0x676e67/rquest-deprecated","commit_stats":null,"previous_names":["0x676e67/rquest","0x676e67/reqwest-impersonate","gngpp/reqwest"],"tags_count":124,"template":false,"template_full_name":null,"purl":"pkg:github/0x676e67/rquest-deprecated","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0x676e67%2Frquest-deprecated","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0x676e67%2Frquest-deprecated/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0x676e67%2Frquest-deprecated/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0x676e67%2Frquest-deprecated/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0x676e67","download_url":"https://codeload.github.com/0x676e67/rquest-deprecated/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0x676e67%2Frquest-deprecated/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270796223,"owners_count":24647320,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-16T02:00:11.002Z","response_time":91,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["akamai-fingerprint","client","fingerprint","http","http-client","http2","http2-fingerprint","https","impersonate","ja3","ja3-fingerprint","ja4","ja4-fingerprint","proxy","tls-fingerprint","websocket"],"created_at":"2024-12-17T07:27:45.034Z","updated_at":"2025-08-17T01:32:17.615Z","avatar_url":"https://github.com/0x676e67.png","language":"Rust","funding_links":["https://github.com/0x676e67/0x676e67/blob/main/SPONSOR.md#sponsor-my-open-source-works"],"categories":["Fingerprinting Evasion"],"sub_categories":["Index"],"readme":"# The project has been moved to: https://github.com/0x676e67/rquest\n\n# rquest\n\n[![Email Badge](https://img.shields.io/badge/Gmail-Contact_Me-green?logo=gmail)](mailto:gngppz@gmail.com)\n[![Crates.io License](https://img.shields.io/crates/l/rquest)](./LICENSE)\n[![crates.io](https://img.shields.io/crates/v/rquest.svg)](https://crates.io/crates/rquest)\n[![Documentation](https://docs.rs/rquest/badge.svg)](https://docs.rs/rquest)\n[![Crates.io Total Downloads](https://img.shields.io/crates/d/rquest)](https://crates.io/crates/rquest)\n\nAn fast asynchronous Rust `HTTP`/`WebSocket` Client with `TLS`/`JA3`/`JA4`/`HTTP2` fingerprint impersonate\n\n- `Async` Client\n- Plain, JSON, urlencoded, multipart bodies\n- Headers Order\n- Customizable redirect policy\n- Cookie Store\n- `HTTP`/`WebSocket` Proxies\n- `HTTPS`/`WebSocket` via BoringSSL\n- Preconfigured `TLS`/`HTTP2`/`Headers` settings\n- [Changelog](https://github.com/0x676e67/rquest/blob/main/CHANGELOG.md)\n\nAdditional learning resources include:\n\n- [API Documentation](https://docs.rs/rquest)\n- [Repository Examples](https://github.com/0x676e67/rquest/tree/master/examples)\n\n## Usage\n\nThis asynchronous example uses [Tokio](https://tokio.rs) and enables some\noptional features, so your `Cargo.toml` could look like this:\n\nHTTP\n\n```toml\n[dependencies]\ntokio = { version = \"1\", features = [\"full\"] }\nrquest = \"0.20\"\n```\n\n```rust,no_run\nuse std::error::Error;\nuse rquest::tls::Impersonate;\n\n#[tokio::main]\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn Error\u003e\u003e {\n    // Build a client to mimic Chrome128\n    let client = rquest::Client::builder()\n        .impersonate(Impersonate::Chrome128)\n        .enable_ech_grease()\n        .permute_extensions()\n        .cookie_store(true)\n        .build()?;\n\n    // Use the API you're already familiar with\n    let resp = client.get(\"https://tls.peet.ws/api/all\").send().await?;\n    println!(\"{}\", resp.text().await?);\n\n    Ok(())\n}\n```\n\nWebSocket\n\n```toml\n[dependencies]\ntokio = { version = \"1\", features = [\"full\"] }\nrquest = { version = \"0.20\", features = [\"websocket\"] }\n```\n\n```rust,no_run\nuse futures_util::{SinkExt, StreamExt, TryStreamExt};\nuse rquest::{tls::Impersonate, Client, Message};\nuse std::error::Error;\n\n#[tokio::main(flavor = \"current_thread\")]\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn Error\u003e\u003e {\n    let websocket = rquest::websocket(\"wss://echo.websocket.org\").await?;\n\n    let (mut tx, mut rx) = websocket.split();\n\n    tokio::spawn(async move {\n        for i in 1..11 {\n            tx.send(Message::Text(format!(\"Hello, World! #{i}\")))\n                .await\n                .unwrap();\n        }\n    });\n\n    while let Some(message) = rx.try_next().await? {\n        match message {\n            Message::Text(text) =\u003e println!(\"received: {text}\"),\n            _ =\u003e {}\n        }\n    }\n\n    Ok(())\n}\n```\n\nPreconfigured `TLS`/`HTTP2`\n\n```toml\n[dependencies]\ntokio = { version = \"1\", features = [\"full\"] }\nrquest = \"0.20\"\n```\n\n```rust\nuse boring::ssl::{SslConnector, SslMethod};\nuse http::HeaderValue;\nuse rquest::{\n    tls::{Http2FrameSettings, TlsExtensionSettings, TlsSettings},\n    HttpVersionPref,\n};\nuse rquest::{PseudoOrder, SettingsOrder};\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn Error\u003e\u003e {\n    // Create a pre-configured TLS settings\n    let settings = TlsSettings::builder()\n        .builder(SslConnector::builder(SslMethod::tls_client())?)\n        .extension(\n            TlsExtensionSettings::builder()\n                .tls_sni(true)\n                .http_version_pref(HttpVersionPref::All)\n                .application_settings(true)\n                .pre_shared_key(true)\n                .enable_ech_grease(true)\n                .permute_extensions(true)\n                .build(),\n        )\n        .http2(\n            Http2FrameSettings::builder()\n                .initial_stream_window_size(6291456)\n                .initial_connection_window_size(15728640)\n                .max_concurrent_streams(1000)\n                .max_header_list_size(262144)\n                .header_table_size(65536)\n                .enable_push(None)\n                .headers_priority((0, 255, true))\n                .headers_pseudo_order([\n                    PseudoOrder::Method,\n                    PseudoOrder::Scheme,\n                    PseudoOrder::Authority,\n                    PseudoOrder::Path,\n                ])\n                .settings_order([\n                    SettingsOrder::InitialWindowSize,\n                    SettingsOrder::MaxConcurrentStreams,\n                ])\n                .build(),\n        )\n        .build();\n\n    // Build a client with pre-configured TLS settings\n    let client = rquest::Client::builder()\n        .use_preconfigured_tls(settings, |headers| {\n            headers.insert(\"user-agent\", HeaderValue::from_static(\"rquest\"));\n        })\n        .enable_ech_grease()\n        .permute_extensions()\n        .build()?;\n\n    // Use the API you're already familiar with\n    let resp = client.get(\"https://tls.peet.ws/api/all\").send().await?;\n    println!(\"{}\", resp.text().await?);\n\n    Ok(())\n}\n\n```\n\n## Requirement\n\nInstall the environment required to build [BoringSSL](https://github.com/google/boringssl/blob/master/BUILDING.md)\n\nDo not compile with crates that depend on OpenSSL; their prefixing symbols are the same and may cause linking [failures](https://github.com/rustls/rustls/issues/2010).\n\n## Contributing\n\nIf you would like to submit your contribution, please open a [Pull Request](https://github.com/0x676e67/rquest/pulls).\n\n## Getting help\n\nYour question might already be answered on the [issues](https://github.com/0x676e67/rquest/issues)\n\n## License\n\nApache-2.0 [LICENSE](LICENSE)\n\n## Accolades\n\nThe project is based on a fork of [reqwest](https://github.com/seanmonstar/reqwest).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0x676e67%2Frquest-deprecated","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0x676e67%2Frquest-deprecated","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0x676e67%2Frquest-deprecated/lists"}