xtekky/gpt4free · error · CloudflareError
Response {response.status_code}: Cloudflare detected
Error message
Response {response.status_code}: Cloudflare detected What it means
Sync variant of the Cloudflare branch: 403 plus a body matching is_cloudflare (checked against response.text) raises CloudflareError. The provider's Cloudflare bot-protection page intercepted the requests-based call.
Source
Thrown at g4f/requests/raise_for_status.py:110
if hasattr(response, "status"):
return raise_for_status_async(response, message)
if response.ok:
return
is_html = False
if message is None:
is_html = response.headers.get("content-type", "").startswith(
"text/html"
) or response.text.startswith("<!DOCTYPE")
message = response.text
if message is None or is_html:
if response.status_code == 520:
message = "Unknown error (Cloudflare)"
if response.status_code in (429, 402):
raise RateLimitError(f"Response {response.status_code}: {message}")
if response.status_code == 401:
raise MissingAuthError(f"Response {response.status_code}: {message}")
if response.status_code == 403 and is_cloudflare(response.text):
raise CloudflareError(f"Response {response.status_code}: Cloudflare detected")
elif response.status_code == 403 and is_openai(response.text):
raise MissingAuthError(f"Response {response.status_code}: OpenAI Bot detected")
elif response.status_code == 502:
raise ResponseStatusError(f"Response {response.status_code}: Bad Gateway")
elif response.status_code == 504:
raise RateLimitError(f"Response {response.status_code}: Gateway Timeout ")
elif response.status_code == 400 and "API key not valid" in message:
raise MissingAuthError(f"Response {response.status_code}: Invalid API key")
else:
raise ResponseStatusError(
f"Response {response.status_code}: {'HTML content' if is_html else message}"
)
View on GitHub (pinned to 973504e177)
Solutions
- Retry from a different IP or network.
- Use g4f providers that drive a real browser (install g4f[webdrivers] extras).
- Switch providers.
- Update g4f for the latest Cloudflare workarounds.
Defensive patterns
Strategy: fallback
Type guard
from g4f.errors import CloudflareError
def is_cloudflare_block(err: BaseException) -> bool:
return isinstance(err, CloudflareError) Try / catch
from g4f.errors import CloudflareError
try:
resp = g4f.ChatCompletion.create(model, messages)
except CloudflareError:
resp = g4f.ChatCompletion.create(other_model, messages) # different provider Prevention
- Rotate providers on Cloudflare blocks
- Keep g4f current
- Prefer API providers over web-scraped ones in production
- Don't immediately retry the blocked provider
When it happens
Trigger: Synchronous g4f HTTP calls to providers behind Cloudflare that serve a challenge/block page (cf-spinner, 'Just a moment...', 'Attention Required!') with 403.
Common situations: Cloudflare rules tightened for the provider; flagged datacenter IP; plain requests TLS fingerprint detected as a bot.
Related errors
- Response {response.status}: Cloudflare detected
- Invalid secrets
- Response status: {response.status}
- Response {response.status_code}: OpenAI Bot detected
- Failed to obtain Turnstile token for DeepInfra request.
AI-assisted analysis of xtekky/gpt4free@973504e177 (2026-08-14).
Data as JSON: /api/errors/57eb895b3a7858a4.
Report an issue: GitHub.