{"record":{"id":"77007847d743b438","repo":"fish2018/pansou","slug":"s-770078","errorCode":null,"errorMessage":"机器人验证失败: %s","messagePattern":"机器人验证失败: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugin/gying/gying.go","lineNumber":1892,"sourceCode":"\tif DebugLog {\n\t\tfmt.Printf(\"[Gying] Challenge提交完成: url=%s status=%d\\n\", requestURL, resp.StatusCode)\n\t}\n\n\trespBody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"读取验证响应失败: %w\", err)\n\t}\n\tif isBotChallengePage(respBody) {\n\t\treturn fmt.Errorf(\"机器人验证出现循环\")\n\t}\n\n\tvar verifyResp challengeVerifyResponse\n\tif err := json.Unmarshal(respBody, &verifyResp); err != nil {\n\t\treturn fmt.Errorf(\"解析验证响应失败: %w\", err)\n\t}\n\tif !verifyResp.Success {\n\t\tif verifyResp.Msg != \"\" {\n\t\t\treturn fmt.Errorf(\"机器人验证失败: %s\", verifyResp.Msg)\n\t\t}\n\t\treturn fmt.Errorf(\"机器人验证失败\")\n\t}\n\n\tif DebugLog {\n\t\tfmt.Printf(\"[Gying] Challenge验证成功: url=%s\\n\", requestURL)\n\t}\n\n\treturn nil\n}\n\nfunc (p *GyingPlugin) requestWithChallengeRetry(scraper *cloudscraper.Scraper, method, requestURL, contentType, requestBody string) ([]byte, int, http.Header, error) {\n\tfor attempt := 0; attempt < 2; attempt++ {\n\t\tvar (\n\t\t\tresp *http.Response\n\t\t\terr  error\n\t\t)\n","sourceCodeStart":1874,"sourceCodeEnd":1910,"githubUrl":"https://github.com/fish2018/pansou/blob/beaa56133755a548ebc51b090b3816e2ae044aa6/plugin/gying/gying.go#L1874-L1910","documentation":"Verification-rejected error in gying's challenge flow (plugin/gying/gying.go:1892): the verify response parsed and Success is false; the site's message is included via %s when present. Means the submitted proof-of-work was computed but the server rejected the verification (stale challenge or wrong answer).","triggerScenarios":"submitChallengeVerification parses challengeVerifyResponse where Success is false and Msg is non-empty — the site explicitly rejected the submitted challenge answer or token.","commonSituations":"挑战时间戳过期后提交；computePowResult 结果与服务端校验不一致。","solutions":["Re-fetch a fresh challenge page and re-solve immediately before submitting.","Ensure the same scraper/session/IP is used for challenge fetch and verification.","Slow down retries to avoid verification rate limits.","Read the embedded Msg for the site's specific rejection reason and update cloudscraper if the challenge type changed."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"var errRejected *RejectedError; if errors.As(err, &errRejected) { if strings.Contains(errRejected.Msg, \"expire\") { refreshChallengeAndRetry() } else { alert(errRejected.Msg) } }","preventionTips":["Submit challenge solutions immediately after fetching them","Use one session/IP for fetch and verify","Throttle verification attempts to avoid rate limits","Surface the site's Msg in logs for diagnosis"],"tags":["anti-bot","challenge-failed","cloudscraper","site-message"],"backgroundTag":"bot-challenge-rejected","analyzedSha":"beaa56133755a548ebc51b090b3816e2ae044aa6","analyzedAt":"2026-09-07T00:31:18.025Z","contentChangedAt":"2026-09-07T00:31:18.025Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}