#websocket #http-request #request #websocket-client #ja3 #async-http

已删除 reqwest-impersonate

一个直观且强大的Rust HTTP/WebSocket客户端,具有TLS/JA3/JA4/HTTP2指纹伪装功能

59个版本

0.11.91 2024年7月25日
0.11.86 2024年6月29日
0.11.67 2024年3月21日
0.11.47 2023年12月29日
0.11.30 2023年11月11日

#5 in #websocket-client

Download history 1650/week @ 2024-04-29 561/week @ 2024-05-06 1144/week @ 2024-05-13 215/week @ 2024-05-20 1675/week @ 2024-05-27 46/week @ 2024-06-03 72/week @ 2024-06-10 35/week @ 2024-06-17 1439/week @ 2024-06-24 258/week @ 2024-07-01 467/week @ 2024-07-08 1004/week @ 2024-07-15 700/week @ 2024-07-22 60/week @ 2024-07-29 1/week @ 2024-08-05 12/week @ 2024-08-12

787 每月下载量
2 crates 中使用

MIT/Apache

735KB
15K SLoC

reqwest-impersonate

crates.io MIT/Apache-2 licensed CI

一个直观且强大的Rust HTTP/WebSocket客户端,具有TLS/JA3/JA4/HTTP2指纹伪装功能

  • 伪装Chrome / Safari / Edge / OkHttp
  • 普通正文,JSON,urlencoded,multipart
  • 可定制的重定向策略
  • HTTP代理
  • 通过BoringSSL的HTTPS
  • WebSocket
  • Cookie存储
  • WASM
  • 变更日志

示例

此异步示例使用Tokio并启用了一些可选功能,因此您的Cargo.toml可能如下所示

[dependencies]
tokio = { version = "1", features = ["full"] }
reqwest_impersonate = "0.11"

或者WebSocket

[dependencies]
tokio = { version = "1", features = ["full"] }
reqwest_impersonate = { version = "0.11", features = ["websocket"] }

然后是代码

use std::error::Error;
use reqwest_impersonate as reqwest;
use reqwest::impersonate::Impersonate;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // Build a client to mimic Chrome123
    let client = reqwest::Client::builder()
        .impersonate(Impersonate::Chrome123)
        .enable_ech_grease()
        .permute_extensions()
        .cookie_store(true)
        .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(())
}

然后是WebSocket代码

use reqwest_impersonate as reqwest;
use std::error::Error;
use tungstenite::Message;

use futures_util::{SinkExt, StreamExt, TryStreamExt};
use reqwest::{impersonate::Impersonate, Client};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let websocket = Client::builder()
        .impersonate_websocket(Impersonate::Chrome120)
        .build()?
        .get("wss://echo.websocket.org")
        .upgrade()
        .send()
        .await?
        .into_websocket()
        .await?;

    let (mut tx, mut rx) = websocket.split();

    tokio::spawn(async move {
        for i in 1..11 {
            tx.send(Message::Text(format!("Hello, World! #{i}")))
                .await
                .unwrap();
        }
    });

    while let Some(message) = rx.try_next().await? {
        match message {
            Message::Text(text) => println!("received: {text}"),
            _ => {}
        }
    }

    Ok(())
}

要求

在Linux上

  • OpenSSL和头文件。有关支持的版本和更多详细信息,请参阅https://docs.rs/openssl。或者您可以选择启用native-tls-vendored功能来编译OpenSSL的一个副本。

在Windows和macOS上

  • 无。

Reqwest使用rust-native-tls,如果可用,将使用操作系统TLS框架,这意味着Windows和macOS。在Linux上,它将使用OpenSSL 1.1。

许可证

许可如下之一

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在本作品中的任何贡献,将根据上述条款进行双重许可,而不附加任何其他条款或条件。

赞助商

Capsolver Capsolver.com 是一款由人工智能驱动的服务,专注于自动解决各种类型的验证码。它支持包括 reCAPTCHA V2reCAPTCHA V3hCaptchaFunCaptchaDataDomeAWS CaptchaGeetest 以及 Cloudflare Captcha / Challenge 5sImperva / Incapsula 在内的多种验证码。对于开发者,Capsolver 提供了详细的 API 集成选项,可在其 文档 中找到,便于将验证码解决功能集成到应用程序中。他们还提供了 Chrome 和 Firefox 的浏览器扩展,使用户可以直接在浏览器中使用他们的服务。提供不同的定价套餐以满足不同的需求,确保用户灵活性。

依赖关系

~2–27MB
~550K SLoC