Files
huya-go/internal/huya/cookie.go
T
2026-07-06 18:08:23 +08:00

71 lines
1.4 KiB
Go

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
}