{"record":{"id":"d66c19b4f7bec236","repo":"projectdiscovery/subfinder","slug":"s-d66c19","errorCode":null,"errorMessage":"%s","messagePattern":"%s","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/subscraping/sources/quake/quake.go","lineNumber":101,"sourceCode":"\t\t\t\tresults <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}\n\t\t\t\ts.errors++\n\t\t\t\tsession.DiscardHTTPResponse(resp)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvar response quakeResults\n\t\t\terr = jsoniter.NewDecoder(resp.Body).Decode(&response)\n\t\t\tif err != nil {\n\t\t\t\tresults <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}\n\t\t\t\ts.errors++\n\t\t\t\tsession.DiscardHTTPResponse(resp)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsession.DiscardHTTPResponse(resp)\n\n\t\t\tif response.Code != 0 {\n\t\t\t\tresults <- subscraping.Result{\n\t\t\t\t\tSource: s.Name(), Type: subscraping.Error, Error: fmt.Errorf(\"%s\", response.Message),\n\t\t\t\t}\n\t\t\t\ts.errors++\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif totalResults == -1 {\n\t\t\t\ttotalResults = response.Meta.Pagination.Total\n\t\t\t}\n\n\t\t\tfor _, quakeDomain := range response.Data {\n\t\t\t\tselect {\n\t\t\t\tcase <-ctx.Done():\n\t\t\t\t\treturn\n\t\t\t\tdefault:\n\t\t\t\t}\n\t\t\t\tsubdomain := quakeDomain.Service.HTTP.Host\n\t\t\t\tif strings.ContainsAny(subdomain, \"暂无权限\") {\n\t\t\t\t\tcontinue","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/projectdiscovery/subfinder/blob/7a0b91f0fac01b62c65328bd771a3560ae611d6a/pkg/subscraping/sources/quake/quake.go#L83-L119","documentation":"Quake 360's API wraps results in a response envelope with a Code field; Code != 0 signals an API-level failure and the source surfaces the API's Message verbatim. Common messages cover invalid API keys, quota exhaustion, and malformed queries.","triggerScenarios":"A successful HTTP call to Quake's search API whose decoded response.Code is non-zero — invalid/expired Quake API key, insufficient quota/credits, or an invalid query payload.","commonSituations":"Unpaid/limited Quake 360 account out of monthly query credits; wrong API key in provider config; query service changes on Quake's side.","solutions":["Read the surfaced response.Message for the exact API reason","Verify the Quake API key in your provider config and regenerate it if needed","Check remaining Quake quota/credits on your 360 account; top up or wait for reset","Confirm your Quake account has access to the search service tier used"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if quakeApiKey == \"\" { return errors.New(\"quake API key required\") }","typeGuard":null,"tryCatchPattern":"// response.Code != 0 carries the API message — branch on known messages\nif strings.Contains(msg, \"quota\") || strings.Contains(msg, \"limit\") {\n\t// wait/top up credits\n} else if strings.Contains(msg, \"key\") || strings.Contains(msg, \"auth\") {\n\t// fix API key in config\n}","preventionTips":["Track Quake monthly query credits before large scans","Regenerate the API key if auth messages appear","Pin to updated subfinder versions when Quake's API changes"],"tags":["go","api-error","quake"],"backgroundTag":"api-error-response","analyzedSha":"7a0b91f0fac01b62c65328bd771a3560ae611d6a","analyzedAt":"2026-09-06T23:52:02.109Z","contentChangedAt":"2026-09-06T23:52:02.109Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}