某图

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(&timestamp());
    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
}