7个版本
0.1.3 | 2023年3月26日 |
---|---|
0.1.2 | 2023年3月26日 |
0.0.3 | 2023年3月25日 |
#287 in HTTP客户端
每月 70 次下载
18KB
310 行
Maera
一个简单的基于间隔的网站监控器,可以绕过网站的TLS指纹识别。
use async_trait::async_trait;
use maera::*;
use serde_json::{from_str, to_string_pretty, Value};
use std::time::Duration;
struct Peet;
#[async_trait]
impl JobHandler for Peet {
type Response = MaeraResponse;
fn request(&self, builder: ChainableRequestBuilder) -> Chain<Self::Response> {
builder
.url("/api/all")
.delay(Duration::from_secs(60))
.into()
}
async fn on_success(&self, response: &mut Self::Response) -> Decision {
// get JSON from response text
let body = response.text().await.unwrap();
let json = from_str::<Value>(&body).unwrap();
println!("{}", to_string_pretty(&json).unwrap());
Decision::Continue
}
}
#[tokio::main]
async fn main() {
let job = JobBuilder::new()
.base_url("https://tls.peet.ws")
.handler(Peet)
.build();
let maera = Maera::new(vec![job]);
maera.start().await.unwrap();
}
模拟浏览器
如果你熟悉系统编程,你可能期望libcurl-impersonate-chrome.so是静态链接并随库本身一起提供的,以便能够精细控制指纹。然而,我不是,也不知道如何做到!所以你需要在运行你的二进制文件时使用以下命令预先加载它。
假设你的共享库位于/usr/local/lib
,你可以设置以下环境变量来预先加载所需的库
LD_PRELOAD="/usr/local/lib/libcurl-impersonate-chrome.so" CURL_IMPERSONATE=chrome111 ./your/binary
建议不要过多更改请求的头部,因为头部的大小写和值用于指纹识别,所以很多像user-agent
这样的头部是硬编码的。
警告,我不知道如何构建Rust库(如从特质的类型签名中可以看出)。如果你遇到这个问题并且想改进API,请随意提交PR。
为什么选择Maera?
她是《命运之熔炉》系列中的主要人物之一。非常推荐阅读!
依赖项
~12–24MB
~398K SLoC