GopeedLab/gopeed · error

Network request failed: %w

Error message

Network request failed: %w

What it means

The generic failure branch of the injected fetch: reqBuilder.Send() returned an error that is not a timeout, so it is wrapped with %w to preserve the cause. The text after the colon is the underlying Go net error (DNS failure, connection refused, TLS error, proxy error, or the redirect errors above).

Source

Thrown at pkg/download/engine/inject/stream/module.go:762

		switch reqMeta.Redirect {
		case "manual":
			return http.ErrUseLastResponse
		case "error":
			return fmt.Errorf("redirect failed")
		default:
			if len(via) > 20 {
				return fmt.Errorf("too many redirects")
			}
			return nil
		}
	})
	resp, err := reqBuilder.Send(reqMeta.Method, reqMeta.URL)
	if err != nil {
		var ne net.Error
		if errorsAsTimeout(err, &ne) {
			return nil, fmt.Errorf("Network request timed out")
		}
		return nil, fmt.Errorf("Network request failed: %w", err)
	}
	id := fmt.Sprintf("%d", time.Now().UnixNano())
	meta := &fetchOpenMeta{
		ID:         id,
		Status:     resp.StatusCode,
		StatusText: resp.Status,
		URL:        reqMeta.URL,
	}
	if resp.Response != nil && resp.Response.Request != nil && resp.Response.Request.URL != nil {
		responseURL := *resp.Response.Request.URL
		responseURL.Fragment = ""
		meta.URL = responseURL.String()
	}
	for key, values := range resp.Header {
		meta.Headers = append(meta.Headers, [2]string{key, strings.Join(values, ", ")})
	}
	bodyCloser := io.NopCloser(strings.NewReader(""))
	if resp.Response != nil && resp.Response.Body != nil {

View on GitHub (pinned to 7b7327ffb3)

Solutions

  1. Read the wrapped part after 'Network request failed:' to identify the real cause (DNS, TLS, proxy, ...)
  2. Verify connectivity with curl from the same machine and configure the proxy in downloader settings if one is required
  3. Retry with backoff for transient connection resets; switch mirrors for persistently failing hosts
Defensive patterns

Strategy: retry

Try / catch

try {
  const resp = await fetch(url);
} catch (e) {
  const msg = String(e);
  if (msg.includes('Network request failed')) {
    // inspect the wrapped cause after the colon:
    // DNS -> fix host/mirror; TLS -> trust store; proxy -> settings; refused -> port/service down
  }
  throw e;
}

Prevention

When it happens

Trigger: gopeed.fetch() to a host that fails DNS resolution or refuses the connection; TLS certificate verification failure; proxy rejecting the request; the wrapped 'redirect failed'/'too many redirects' errors from the redirect policy.

Common situations: Corporate networks requiring a proxy that is not configured; sites with certificates missing from the system trust store; typos in the URL host; firewall blocking the downloader; extensions fetching HTTP-only endpoints that got redirected to HTTPS with a bad cert.

Related errors


AI-assisted analysis of GopeedLab/gopeed@7b7327ffb3 (2026-08-16). Data as JSON: /api/errors/a8a2317c82d86bb4. Report an issue: GitHub.