
Ethan Collins
Pattern Recognition Specialist

El error 1020 de Cloudflare indica que el acceso ha sido denegado. Este error se activa cuando se viola una regla del firewall del sitio web, protegido por Cloudflare. Varios actos, como realizar solicitudes excesivas al sitio, pueden provocar esta violación.
Formas comunes de resolver este problema:
El error 1015 de Cloudflare ocurre cuando tu dirección IP es marcada y bloqueada por Cloudflare por exceder el límite de tasas de un sitio durante actividades de scraping. Esto puede llevar a que encuentres este error.
Formas comunes de resolver este problema:
Un código de estado 403 es una respuesta "Prohibido", emitida por un servidor cuando reconoce una solicitud como válida pero se niega a cumplirla. Esto puede ocurrir debido a la falta de encabezados necesarios en tu solicitud, como encabezados CORS, JWT o de autenticación que el servidor espera.
Si el sitio es generalmente accesible y agregar los encabezados correctos no resuelve el problema, es posible que el servidor esté detectando tus solicitudes como automatizadas.
Formas comunes de resolver este problema:
Canjea tu código de bonificación de CapSolver
¡Aumenta tu presupuesto de automatización de inmediato!
Usa el código de bonificación CAPN al recargar tu cuenta de CapSolver para obtener un 5% adicional en cada recarga — sin límites.
Canjéalo ahora en tu Panel de CapSolver
.
El desafío de Cloudflare se ve así:

A veces, esta página podría tener turnstile

Verifica que necesites resolver el Cloudflare Challenge 5s y no solo turnstile, para solo turnstile, por favor sigue leyendo este blog.
Hay algunos requisitos al resolver este desafío usando Capsolver.
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_DE_API",
"task": {
"type": "AntiCloudflareTask",
"websiteURL": "https://www.tusitio.com",
"proxy": "158.120.100.23:334:user:pass"
}
}
Después de enviar correctamente, la API devolverá un taskId
{
"errorId": 0,
"taskId": "014fc55c-46c9-41c8-9de7-6cb35d984edc",
"status": "idle"
}
Obtén este valor taskId y úsalo para recuperar el resultado utilizando el método getTaskResult
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_DE_API",
"taskId": "taskId"
}
Dependiendo de la carga del sistema, obtendrás los resultados en un intervalo de 1s a 20s
Si recibes ERROR_CAPTCHA_SOLVE_FAILED en la respuesta, podría ser por varias razones:
Si recibes una respuesta de éxito, se verá así:
{
"errorId": 0,
"taskId": "d8d3a8b4-30cc-4b09-802a-a476ca17fa54",
"status": "ready",
"solution": {
"accept-language": "en-US,en;q=0.9",
"cookies": {
},
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
"cache-control": "max-age=0",
"content-type": "application/x-www-form-urlencoded",
"origin": "",
"referer": "",
"sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
"sec-ch-ua-arch": "\"arm\"",
"sec-ch-ua-bitness": "\"64\"",
"sec-ch-ua-full-version": "\"120.0.6099.71\"",
"sec-ch-ua-full-version-list": "\"Not_A Brand\";v=\"8.0.0.0\", \"Chromium\";v=\"120.0.6099.71\", \"Google Chrome\";v=\"120.0.6099.71\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-model": "\"\"",
"sec-ch-ua-platform": "\"macOS\"",
"sec-ch-ua-platform-version": "\"10.14.6\"",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "same-origin",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
},
"proxy": "tu proxy",
"token": "token de cf clearance",
"type": "challenge",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
}
De esta respuesta, necesitarás analizar los valores de cookies, headers, token.
Tu solicitud deberá verse así:
cf_clearance que necesitarás crear# -*- coding: utf-8 -*-
import requests
import time
import tls_client
# TODO: Tu clave de API
API_KEY = ""
proxy = ""
# TODO: Tu URL del sitio objetivo:
page_url = ''
def call_capsolver():
data = {
"clientKey": API_KEY,
"task": {
"type": 'AntiCloudflareTask',
"websiteURL": page_url,
"proxy": proxy,
}
}
uri = 'https://api.capsolver.com/createTask'
res = requests.post(uri, json=data)
resp = res.json()
task_id = resp.get('taskId')
if not task_id:
print("no se obtuvo taskId:", res.text)
return
print('taskId creado:', task_id)
while True:
time.sleep(1)
data = {
"clientKey": API_KEY,
"taskId": task_id
}
response = requests.post('https://api.capsolver.com/getTaskResult', json=data)
resp = response.json()
status = resp.get('status', '')
if status == "ready":
print("éxito => ", response.text)
return resp.get('solution')
if status == "failed" or resp.get("errorId"):
print("falló! => ", response.text)
return
def request_site(solution):
session = tls_client.Session(
client_identifier="chrome_120",
random_tls_extension_order=True
)
return session.get(
page_url,
headers=solution.get('headers'),
cookies=solution.get('cookies'),
proxy=proxy,
)
def main():
solution = {
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"sec-fetch-site": "none",
"sec-fetch-mode": "navigate",
"sec-fetch-user": "?1",
"sec-fetch-dest": "document",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-US,en;q=0.9",
}
}
# primera solicitud (verifica tu proxy):
res = request_site(solution)
print('1. código de estado de la respuesta:', res.status_code)
if res.status_code != 403:
print("tu proxy es bueno y no obtuviste el desafío de Cloudflare")
return
elif 'window._cf_chl_opt' not in res.text:
print('==== proxy bloqueado ==== ')
return
# llamar a CapSolver:
solution = call_capsolver()
if not solution:
return
# segunda solicitud (verificar la solución):
res = request_site(solution)
print('2. código de estado de la respuesta:', res.status_code)
if __name__ == '__main__':
main()
El Captcha de Cloudflare Turnstile se ve así:
Desafío gestionado

Desafío no interactivo

Desafío invisible
no visible, puedes revisar en la red / scripts cargados y ver si se usa turnstile
Verifica que necesites resolver el Captcha de Cloudflare Turnstile y no el Cloudflare Challenge 5s, para solo Cloudflare Challenge, por favor sigue leyendo este blog.
Hay algunos requisitos al resolver este desafío usando Capsolver.
POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_DE_API",
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": "https://www.tusitio.com",
"websiteKey": "0x4XXXXXXXXXXXXXXXXX",
"metadata": {
"action": "login", //opcional
"cdata": "0000-1111-2222-3333-ejemplo-cdata" //opcional
}
}
}
"action" y "cdata" son opcionales, a veces se requieren y otras no.
Depende de la configuración del sitio web.
action es el valor del atributo data-action del elemento Turnstile si existe.
cdata es el valor del atributo data-cdata del elemento Turnstile si existe.
Después de enviar correctamente, la API devolverá un taskId
{
"errorId": 0,
"taskId": "014fc55c-46c9-41c8-9de7-6cb35d984edc",
"status": "idle"
}
Obtén este valor taskId y úsalo para recuperar el resultado utilizando el método getTaskResult
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_DE_API",
"taskId": "taskId"
}
Dependiendo de la carga del sistema, obtendrás los resultados en un intervalo de 1s a 20s
Si recibes ERROR_CAPTCHA_SOLVE_FAILED en la respuesta, podría ser por varias razones:
Si recibes una respuesta de éxito, se verá así:
{
"errorId": 0,
"taskId": "d1e1487a-2cd8-4d4a-aa4d-4ba5b6c65484",
"status": "ready",
"solution": {
"token": "0.cZJPqwnyDxL86HvAXSk4lUTQhjwfyXDcR3qpVwFofuzosoKr1otKj_A-utazXx_Tnp1B2V6womrltBpRw9HbY851ktpaF7sBN-gQwtoRUew4Wj5PO4-WLYPnNRpXxludXzyQ.1oHJhu7619fb8c07ab942bd1587bc76e0e3cef95c7aa75400c4f7d3",
"type": "turnstile",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
}
De esta respuesta, necesitarás analizar el valor de token y este será la solución del captcha que necesitarás enviar al sitio web.
import time
from curl_cffi import requests
CAPSOLVER_API_KEY = "Tu clave de API de CAPSOLVER.COM"
PAGE_URL = ""
WEBSITE_KEY = ""
def solvecf(metadata_action=None, metadata_cdata=None):
url = "https://api.capsolver.com/createTask"
task = {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": PAGE_URL,
"websiteKey": WEBSITE_KEY,
}
if metadata_action or metadata_cdata:
task["metadata"] = {}
if metadata_action:
task["metadata"]["action"] = metadata_action
if metadata_cdata:
task["metadata"]["cdata"] = metadata_cdata
data = {
"clientKey": CAPSOLVER_API_KEY,
"task": task
}
response_data = requests.post(url, json=data).json()
print(response_data)
return response_data['taskId']
def solutionGet(taskId):
url = "https://api.capsolver.com/getTaskResult"
status = ""
while status != "ready":
data = {"clientKey": CAPSOLVER_API_KEY, "taskId": taskId}
response_data = requests.post(url, json=data).json()
print(response_data)
status = response_data.get('status', '')
print(status)
if status == "ready":
return response_data['solution']
time.sleep(2)
def main():
start_time = time.time()
taskId = solvecf()
solution = solutionGet(taskId)
if solution:
user_agent = solution['userAgent']
token = solution['token']
print("User_Agent:", user_agent)
print("Captcha de Turnstile resuelto, token:", token)
end_time = time.time()
elapsed_time = end_time - start_time
print(f"Tiempo para resolver el captcha: {elapsed_time} segundos")
if __name__ == "__main__":
main()
const axios = require('axios');
const CAPSOLVER_API_KEY = "";
const PAGE_URL = "";
const WEBSITE_KEY = "";
async function solvecf(metadata_action = null, metadata_cdata = null) {
const url = "https://api.capsolver.com/createTask";
const task = {
type: "AntiTurnstileTaskProxyLess",
websiteURL: PAGE_URL,
websiteKey: WEBSITE_KEY,
};
if (metadata_action || metadata_cdata) {
task.metadata = {};
if (metadata_action) {
task.metadata.action = metadata_action;
}
if (metadata_cdata) {
task.metadata.cdata = metadata_cdata;
}
}
const data = {
clientKey: CAPSOLVER_API_KEY,
task: task
};
const response = await axios.post(url, data);
console.log(response.data);
return response.data.taskId;
}
async function solutionGet(taskId) {
const url = "https://api.capsolver.com/getTaskResult";
let status = "";
while (status !== "ready") {
const data = { clientKey: CAPSOLVER_API_KEY, taskId: taskId };
const response = await axios.post(url, data);
console.log(response.data);
status = response.data.status;
console.log(status);
if (status === "ready") {
return response.data.solution;
}
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
async function main() {
const start_time = Date.now();
const taskId = await solvecf();
const solution = await solutionGet(taskId);
if (solution) {
const user_agent = solution.userAgent;
const token = solution.token;
console.log("Usuario:", user_agent);
console.log("Captcha de Turnstile resuelto, token:", token);
}
const end_time = Date.now();
const elapsed_time = (end_time - start_time) / 1000;
console.log(`Tiempo para resolver el captcha: ${elapsed_time} segundos`);
}
main().catch(console.error);
Cloudflare implementa múltiples mecanismos de protección — desde bloques HTTP estándar como 1020, 403, 429 (1015) hasta desafíos más avanzados como el desafío 5s de Cloudflare y el Captcha de Turnstile. Al realizar raspado de web o automatización, identificar qué protección está activa es el primer paso clave.
Este guía explicó los códigos de estado comunes de Cloudflare, cómo distinguir entre el desafío 5s y el Captcha de Turnstile, y proporcionó ejemplos funcionales para resolverlos usando la API de Capsolver, incluyendo implementaciones en Python y NodeJS.
Elija el enfoque adecuado — rotación de proxies, encabezados adecuados, protección de huella digital o resolver programáticamente el CAPTCHA/desafío — para mejorar significativamente las tasas de éxito en el raspado y reducir los bloqueos.
Si sus solicitudes aún están siendo marcadas, revise su configuración de raspador: la calidad del proxy, los encabezados, la huella de TLS y la frecuencia de las solicitudes suelen ser tan importantes como el solucionador de CAPTCHA en sí mismo.
Verifique la interfaz de usuario o las solicitudes de red.
Posibles razones:
Sí. Con proxies buenos, rotación de huellas digitales y lógica para reutilizar tokens, puede escalar el raspado — asegúrese de cumplir con los términos del sitio web y las regulaciones legales locales.
Turnstile suele ser más fácil ya que normalmente devuelve un único token. El desafío 5s requiere cookies, encabezados y consistencia en el proxy, lo que lo hace más complejo.
Aprende a solucionar el error de Cloudflare 1005 acceso denegado durante el scraping de web. Descubre soluciones como proxies residenciales, fingerprinting del navegador y CapSolver para CAPTCHA. Optimiza tu extracción de datos.

Descubre cómo manejar eficazmente Cloudflare Turnstile en flujos de trabajo de IA utilizando técnicas de stealth de Playwright y CapSolver para la resolución confiable de captchas. Aprende estrategias de integración prácticas y mejores prácticas para automatización ininterrumpida.
