fish2018/pansou · error
令牌接口返回状态码
Error message
令牌接口返回状态码 %d
What it means
Status error in ting77's fetchLinkToken (plugin/ting77/ting77.go:317): the link-token API returned a non-200 status other than 429 (429 is mapped to errRateLimited earlier), so the resource's token cannot be obtained.
Solutions
- Honor errRateLimited separately with backoff
- For 403/5xx, retry with jitter or drop the entry
- Log resourceID to find systematically failing entries
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at plugin/ting77/ting77.go:317 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of fish2018/pansou@beaa561337 (2026-09-07).
Data as JSON: /api/errors/ea9bbdd3f5d26854.
Report an issue: GitHub.
Appendix: source
Thrown at plugin/ting77/ting77.go:317
req, err := http.NewRequestWithContext(ctx, http.MethodGet, p.baseURL+"/api/link/token?"+query.Encode(), nil)
if err != nil {
return "", "", err
}
setRequestHeaders(req, p.baseURL+"/resource/"+resourceID, "application/json")
resp, err := client.Do(req)
if err != nil {
return "", "", err
}
defer resp.Body.Close()
body, err := io.ReadAll(io.LimitReader(resp.Body, 512<<10))
if err != nil {
return "", "", err
}
if resp.StatusCode != http.StatusOK {
if resp.StatusCode == http.StatusTooManyRequests {
return "", "", errRateLimited
}
return "", "", fmt.Errorf("令牌接口返回状态码 %d", resp.StatusCode)
}
var token tokenResponse
if err := json.Unmarshal(body, &token); err != nil {
return "", "", fmt.Errorf("解析链接令牌失败: %w", err)
}
if token.Code != 0 || token.Data.Token == "" || token.Data.TS == "" {
if token.Code == http.StatusTooManyRequests {
return "", "", errRateLimited
}
return "", "", fmt.Errorf("链接令牌无效: %s", token.Message)
}
return token.Data.Token, token.Data.TS, nil
}
func setRequestHeaders(req *http.Request, referer, accept string) {
req.Header.Set("User-Agent", browserUserAgent)
req.Header.Set("Accept", accept)
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")View on GitHub (pinned to beaa561337)