package huya import ( "strconv" "strings" ) type CookiePair struct { Key string Value string } func CookiePairs(cookie string) []CookiePair { parts := strings.Split(cookie, ";") pairs := make([]CookiePair, 0, len(parts)) for _, part := range parts { item := strings.TrimSpace(part) if item == "" || !strings.Contains(item, "=") { continue } key, value, _ := strings.Cut(item, "=") key = strings.TrimSpace(key) if key == "" { continue } pairs = append(pairs, CookiePair{Key: key, Value: strings.TrimSpace(value)}) } return pairs } func NormalizeCookie(cookie string) string { pairs := CookiePairs(cookie) order := make([]string, 0, len(pairs)) values := map[string]string{} for _, pair := range pairs { if _, ok := values[pair.Key]; !ok { order = append(order, pair.Key) } values[pair.Key] = pair.Value } out := make([]string, 0, len(order)) for _, key := range order { out = append(out, key+"="+values[key]) } return strings.Join(out, "; ") } func CookieValue(cookie, key string) string { value := "" for _, pair := range CookiePairs(cookie) { if pair.Key == key { value = pair.Value } } return value } func ResolveUID(cookie string) int64 { for _, key := range []string{"yyuid", "udb_uid", "uid"} { value := CookieValue(cookie, key) if value == "" { continue } uid, err := strconv.ParseInt(value, 10, 64) if err == nil && uid > 0 { return uid } } return 0 }