projectdiscovery/subfinder · error
%s
Error message
%s
What it means
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.
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
Defensive patterns
Strategy: validation
Validate before calling
if quakeApiKey == "" { return errors.New("quake API key required") } Try / catch
// response.Code != 0 carries the API message — branch on known messages
if strings.Contains(msg, "quota") || strings.Contains(msg, "limit") {
// wait/top up credits
} else if strings.Contains(msg, "key") || strings.Contains(msg, "auth") {
// fix API key in config
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: Unpaid/limited Quake 360 account out of monthly query credits; wrong API key in provider config; query service changes on Quake's side.
Related errors
- %s
- request failed with status
- error marshaling request body
- failed to marshal request body
- failed to close response body
AI-assisted analysis of projectdiscovery/subfinder@7a0b91f0fa (2026-09-06).
Data as JSON: /api/errors/d66c19b4f7bec236.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/subscraping/sources/quake/quake.go:101
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
s.errors++
session.DiscardHTTPResponse(resp)
return
}
var response quakeResults
err = jsoniter.NewDecoder(resp.Body).Decode(&response)
if err != nil {
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
s.errors++
session.DiscardHTTPResponse(resp)
return
}
session.DiscardHTTPResponse(resp)
if response.Code != 0 {
results <- subscraping.Result{
Source: s.Name(), Type: subscraping.Error, Error: fmt.Errorf("%s", response.Message),
}
s.errors++
return
}
if totalResults == -1 {
totalResults = response.Meta.Pagination.Total
}
for _, quakeDomain := range response.Data {
select {
case <-ctx.Done():
return
default:
}
subdomain := quakeDomain.Service.HTTP.Host
if strings.ContainsAny(subdomain, "暂无权限") {
continueView on GitHub (pinned to 7a0b91f0fa)