{"record":{"id":"2f848676b18c3df4","repo":"fish2018/pansou","slug":"anubis-d-2f8486","errorCode":null,"errorMessage":"Anubis 验证结果返回状态码 %d","messagePattern":"Anubis 验证结果返回状态码 (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugin/miosou/miosou.go","lineNumber":209,"sourceCode":"\t\t\"response\":    []string{hash},\n\t\t\"nonce\":       []string{strconv.FormatUint(nonce, 10)},\n\t\t\"redir\":       []string{baseURL + \"/\"},\n\t\t\"elapsedTime\": []string{strconv.FormatInt(elapsed, 10)},\n\t}\n\tpassReq, err := http.NewRequestWithContext(ctx, http.MethodGet, baseURL+anubisPassPath+\"?\"+query.Encode(), nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"创建 Anubis 验证提交请求失败: %w\", err)\n\t}\n\tsetPageHeaders(passReq)\n\tpassReq.Header.Set(\"Referer\", resp.Request.URL.String())\n\tpassResp, err := p.client.Do(passReq)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"提交 Anubis 验证结果失败: %w\", err)\n\t}\n\tio.Copy(io.Discard, io.LimitReader(passResp.Body, 1<<20))\n\tpassResp.Body.Close()\n\tif passResp.StatusCode != http.StatusOK || isAnubisGateResponse(passResp) {\n\t\treturn fmt.Errorf(\"Anubis 验证结果返回状态码 %d\", passResp.StatusCode)\n\t}\n\treturn nil\n}\n\nfunc (p *MiosouPlugin) invalidateGate() {\n\tp.gateMu.Lock()\n\tp.gateReady = false\n\tp.gateMu.Unlock()\n}\n\nfunc setHeaders(req *http.Request, accept string) {\n\treq.Header.Set(\"User-Agent\", browserUserAgent)\n\treq.Header.Set(\"Accept\", accept)\n\treq.Header.Set(\"Accept-Language\", \"zh-CN,zh;q=0.9,en;q=0.8\")\n\treq.Header.Set(\"Cache-Control\", \"no-cache\")\n\treq.Header.Set(\"Referer\", baseURL+\"/\")\n\torigin := baseURL\n\treq.Header.Set(\"Origin\", origin)","sourceCodeStart":191,"sourceCodeEnd":227,"githubUrl":"https://github.com/fish2018/pansou/blob/beaa56133755a548ebc51b090b3816e2ae044aa6/plugin/miosou/miosou.go#L191-L227","documentation":"The pass endpoint must return HTTP 200 and NOT look like another Anubis gate. If passResp.StatusCode != 200 or isAnubisGateResponse(passResp) is true, the challenge was rejected and this error reports the status (miosou.go:209).","triggerScenarios":"The solved hash/nonce is rejected (wrong answer or expired challenge id), the server returns 401/403/429/5xx, or the response still routes through /.within.website/ indicating the gate did not clear.","commonSituations":"Anubis server version change altering the expected proof format, challenge expiring before submission (slow PoW), rate limiting, or an incorrect elapsedTime/redir parameter confusing the server.","solutions":["Retry the full flow — ensureGate reruns with a fresh challenge; expired challenges succeed on the next attempt.","Increase gateTimeout so slow devices submit before the challenge expires.","Verify the proof parameters (id, response hex hash, nonce, redir) match the current Anubis server expectations; update if Anubis upgraded.","Check whether the server is rate-limiting your IP (429) and back off.","Confirm baseURL matches the exact host the challenge was issued for."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := p.ensureGate(); err != nil {\n    if strings.Contains(err.Error(), \"验证结果返回状态码\") {\n        // proof rejected: retry full flow; if persistent, check Anubis version compat\n    }\n    return err\n}","preventionTips":["Submit promptly after solving so the challenge doesn't expire","Match the Anubis client version with the server version","Respect rate limits (back off on 429)","Verify redir/id parameters match the challenge host"],"tags":["http","anubis","status-code","proof-of-work"],"backgroundTag":"http-error-response","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"}