package huashijie_api import ( "fmt" "io" "math/rand" "net/http" "os" "strings" ) var XIAOMI_MODELS = []string{ "2107119DC", "23116PN5BC", "23124RN87C", "24031PN0DC", "24072PX77C", "24074RPD2C", "M1804E4A", "M1810E5GG", "M2001J1C", "M2002J9E", "MDE5", } func EnsureConnection(client http.Client) { // https://app.huashijie.art/api/update/checkUpdate req, err := http.NewRequest("GET", "https://app.huashijie.art/api/update/checkUpdate", nil) if err != nil { panic(err) } req.Header.Add("Referer", "https://app.huashijie.art/") req.Header.Add("User-Agent", "Dalvik/2.1.0 (Linux; U; Android 9; MI 8 SE MIUI/V12.0.2.0.PEBCNXM)") resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { panic(err) } text := string(body) fmt.Println(text) if !strings.Contains(text, "update_ver_code") { panic("NotImplementedError: " + text) } } func GetWorkDetailResponse(client http.Client, work_id string) ([]byte, int) { endpoint := "https://app.huashijie.art/" if os.Getenv("HSJ_ENDPOINT") == "pandapaint" { endpoint = "https://api.pandapaint.net/" } req, err := http.NewRequest("GET", endpoint+"api/work/detailV2", nil) if err != nil { panic(err) } q := req.URL.Query() q.Add("visitorId", "-1") q.Add("workId", work_id) q.Add("cur_user_id", "-1") q.Add("platform", "android") os_version := rand.Intn(34-28) + 28 q.Add("os_version", fmt.Sprintf("%d", os_version)) if os.Getenv("HSJ_ENDPOINT") == "pandapaint" { q.Add("version_code", "168") } else { q.Add("version_code", "241") } q.Add("device_brand", "xiaomi") device_model := XIAOMI_MODELS[rand.Intn(len(XIAOMI_MODELS))] q.Add("device_model", device_model) q.Add("token", "") if os.Getenv("HSJ_ENDPOINT") == "pandapaint" { q.Add("channel", "Panda.main") } else { q.Add("channel", "main") } headers := map[string][]string{ "Referer": {endpoint}, "User-Agent": {"okhttp/3.12.0"}, } for k, v := range headers { req.Header[k] = v } req.URL.RawQuery = q.Encode() resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { panic(err) } return body, resp.StatusCode }