use std::{collections::HashMap, time::{SystemTime,UNIX_EPOCH}};
use rand::Rng;
use reqwest::header;
use serde_json::Value;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut headers = header::HeaderMap::new();
headers.insert("authority", "stapi.youpengw.com".parse().unwrap());
headers.insert("accept", "*/*".parse().unwrap());
headers.insert("accept-language", "zh-CN,zh;q=0.9".parse().unwrap());
headers.insert("content-type", "application/json".parse().unwrap());
headers.insert("referer", "https://servicewechat.com/wx535ad18d22b24807/10/page-frame.html".parse().unwrap());
headers.insert("sec-fetch-dest", "empty".parse().unwrap());
headers.insert("sec-fetch-mode", "cors".parse().unwrap());
headers.insert("sec-fetch-site", "cross-site".parse().unwrap());
headers.insert("sign", sign().parse().unwrap());
headers.insert("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/8447".parse().unwrap());
headers.insert("xweb_xhr", "1".parse().unwrap());
let client = reqwest::Client::new();
let res = client.post("https://stapi.youpengw.com/miniwechat/v1/natujun/photoList")
.headers(headers)
.body("{\"homepage_id\":\"233033\",\"classify_id\":5,\"sort_type\":\"default\",\"album_id\":0,\"uid\":219050,\"page\":1,\"limit\":15,\"action\":\"cover\",\"version\":1,\"appid\":\"wx535ad18d22b24807\",\"openid\":\"oGoSf5Js4OD_yGbRP9UTjLcDf674\",\"timestamp\":1697353429134}")
.send()
.await?
.json::<HashMap<String, Value>>()
.await?;
println!("{:#?}", res);
Ok(())
}
fn sign() ->String{
let mut token=String::from("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcGVuaWQiOiJvR29TZjVKczRPRF95R2JSUDlVVGpMY0RmNjc0IiwiZXhwaXJlX3RpbWUiOjE2OTczMDQ1MzV9.)FxVKiDH9rnMKEuTNMkRa7ibMrhp-Vdi-FHBgWOomdaQ###");
token.push_str(×tamp());
encode(&token)
}
fn timestamp()->String{
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis()
.to_string()
}
fn encode(input: &str) -> String {
let staticchars = "PXhw7UT1B0a9kQDKZsjIASmOezxYG4CHo5Jyfg2b8FLpEvRr3WtVnlqMidu6cN";
let mut encodechars = String::new();
for c in input.chars() {
let num0 = staticchars.find(c);
let code: char = match num0 {
Some(index) => staticchars.chars().cycle().nth(index + 3).unwrap(),
None => c,
};
let num1 = rand::thread_rng().gen_range(0..62);
let num2 = rand::thread_rng().gen_range(0..62);
encodechars.push(staticchars.chars().nth(num1).unwrap());
encodechars.push(code);
encodechars.push(staticchars.chars().nth(num2).unwrap());
}
encodechars
}