Flaresolverr es un servidor proxy para evitar la protección CloudFlare y Ddos-Guard.
FlaresolverR inicia un servidor proxy y espera las solicitudes de los usuarios en un estado inactivo utilizando pocos recursos. Cuando llega alguna solicitud, usa selenio con el rromedriver no detectado para crear un navegador web (Chrome). Abre la URL con los parámetros del usuario y espera hasta que se resuelva el desafío CloudFlare (o el tiempo de espera). El código HTML y las cookies se devuelven al usuario, y esas cookies se pueden usar para evitar CloudFlare utilizando otros clientes HTTP.
Nota : los navegadores web consumen mucha memoria. Si está ejecutando Flaresolver en una máquina con pocas RAM, no realice muchas solicitudes a la vez. Con cada solicitud se lanza un nuevo navegador.
También es posible usar una sesión permanente. Sin embargo, si usa sesiones, debe asegurarse de cerrarlas tan pronto como haya terminado de usarlas.
Se recomienda instalar utilizando un contenedor Docker porque el proyecto depende de un navegador externo que ya esté incluido dentro de la imagen.
Las imágenes de Docker están disponibles en:
Las arquitecturas compatibles son:
| Arquitectura | Etiqueta |
|---|---|
| x86 | Linux/386 |
| x86-64 | Linux/AMD64 |
| Brazo | Linux/Arm/V7 |
| Brazo | Linux/ARM64 |
Proporcionamos un archivo de configuración docker-compose.yml . Clone este repositorio y ejecute docker-compose up -d (compose v1) o docker compose up -d (composición v2) para iniciar el contenedor.
Si prefiere el docker cli ejecute el siguiente comando.
docker run -d
--name=flaresolverr
-p 8191:8191
-e LOG_LEVEL=info
--restart unless-stopped
ghcr.io/flaresolverr/flaresolverr:latest Si su sistema operativo host es Debian, asegúrese de que la versión libseccomp2 sea 2.5.x. Puede verificar la versión con sudo apt-cache policy libseccomp2 y actualizar el paquete con sudo apt install libseccomp2=2.5.1-1~bpo10+1 o sudo apt install libseccomp2=2.5.1-1+deb11u1 . Recuerde reiniciar el Docker Daemon y el contenedor después de la actualización.
Advertencia Los binarios precompilados solo están disponibles para la arquitectura X64. Para otras arquitecturas ver imágenes de Docker.
Esta es la forma recomendada para los usuarios de Windows.
La instalación de advertencia desde el código fuente solo funciona para la arquitectura X64. Para otras arquitecturas ver imágenes de Docker.
pip install -r requirements.txt para instalar dependencias Flaresolverr.python src/flaresolverr.py para iniciar flaresolver.pkg install chromium python39 py39-pip xorg-vfbserver para instalar las dependencias requeridas.python3.9 -m pip install -r requirements.txt .python3.9 src/flaresolverr.py para iniciar Flaresolver. Proporcionamos un ejemplo de archivo de la unidad Systemd flaresolverr.service como referencia. Debe modificar el archivo para satisfacer sus necesidades: rutas, variables de usuario y entorno.
Solicitud de Bash de ejemplo:
curl -L -X POST ' http://localhost:8191/v1 '
-H ' Content-Type: application/json '
--data-raw ' {
"cmd": "request.get",
"url": "http://www.google.com/",
"maxTimeout": 60000
} 'Ejemplo de solicitud de python:
import requests
url = "http://localhost:8191/v1"
headers = { "Content-Type" : "application/json" }
data = {
"cmd" : "request.get" ,
"url" : "http://www.google.com/" ,
"maxTimeout" : 60000
}
response = requests . post ( url , headers = headers , json = data )
print ( response . text )Ejemplo de solicitud de PowerShell:
$body = @ {
cmd = " request.get "
url = " http://www.google.com/ "
maxTimeout = 60000
} | ConvertTo-Json
irm - UseBasicParsing ' http://localhost:8191/v1 ' - Headers @ { " Content-Type " = " application/json " } - Method Post - Body $bodysessions.create Esto lanzará una nueva instancia de navegador que retendrá cookies hasta que lo destruya con sessions.destroy . Esto es útil, por lo que no tiene que seguir resolviendo desafíos una y otra vez y no necesitará seguir enviando galletas para que el navegador lo use.
Esto también acelera las solicitudes ya que no tendrá que iniciar una nueva instancia de navegador para cada solicitud.
| Parámetro | Notas |
|---|---|
| sesión | Opcional. La identificación de sesión que desea asignar a la instancia. Si no se establece, se asignará un UUID aleatorio. |
| apoderado | Opcional, predeterminado deshabilitado. Por ejemplo: "proxy": {"url": "http://127.0.0.1:8888"} . Debe incluir el esquema proxy en la URL: http:// , socks4:// o socks5:// . Se admite la autorización (nombre de usuario/contraseña). Por ejemplo: "proxy": {"url": "http://127.0.0.1:8888", "username": "testuser", "password": "testpass"} |
sessions.listDevuelve una lista de todas las sesiones activas. Más para la depuración si tiene curiosidad por ver cuántas sesiones se están ejecutando. Siempre debe asegurarse de cerrar correctamente cada sesión cuando haya terminado de usarlas, ya que demasiados pueden frenar su computadora.
Respuesta de ejemplo:
{
"sessions" : [
" session_id_1 " ,
" session_id_2 " ,
" session_id_3... "
]
}sessions.destroyEsto cerrará correctamente una instancia de navegador y eliminará todos los archivos asociados para liberar recursos para una nueva sesión. Cuando ya no necesita usar una sesión, debe asegurarse de cerrarla.
| Parámetro | Notas |
|---|---|
| sesión | La identificación de la sesión que quieres ser destruida. |
request.get| Parámetro | Notas |
|---|---|
| url | Obligatorio |
| sesión | Opcional. Enviará la solicitud desde e instancia del navegador existente. Si no se envía uno, creará una instancia temporal que se destruirá inmediatamente después de que se complete la solicitud. |
| session_ttl_minutes | Opcional. Flaresolver rotará automáticamente las sesiones caducadas según el TTL proporcionado en minutos. |
| Maxtimeut | Opcional, valor predeterminado 60000. Tiempo de espera máximo para resolver el desafío en milisegundos. |
| galletas | Opcional. Será utilizado por el navegador sin cabeza. Por ejemplo: "cookies": [{"name": "cookie1", "value": "value1"}, {"name": "cookie2", "value": "value2"}] . |
| returnylycookies | Opcional, falso predeterminado. Solo devuelve las cookies. Se eliminan los datos de respuesta, encabezados y otras partes de la respuesta. |
| apoderado | Opcional, predeterminado deshabilitado. Por ejemplo: "proxy": {"url": "http://127.0.0.1:8888"} . Debe incluir el esquema proxy en la URL: http:// , socks4:// o socks5:// . La autorización (nombre de usuario/contraseña) no es compatible. (Cuando se establece el parámetro session , se ignora el proxy; se puede establecer un proxy específico de la sesión en sessions.create . |
ADVERTENCIA Si desea usar CloudFlare Cockie en sus scripts, asegúrese de usar el agente de usuario FlaresolverR también. Si no coinciden, verá el desafío.
Respuesta de ejemplo al ejecutar el curl anterior:
{
"solution" : {
"url" : " https://www.google.com/?gws_rd=ssl " ,
"status" : 200 ,
"headers" : {
"status" : " 200 " ,
"date" : " Thu, 16 Jul 2020 04:15:49 GMT " ,
"expires" : " -1 " ,
"cache-control" : " private, max-age=0 " ,
"content-type" : " text/html; charset=UTF-8 " ,
"strict-transport-security" : " max-age=31536000 " ,
"p3p" : " CP= " This is not a P3P policy! See g.co/p3phelp for more info. " " ,
"content-encoding" : " br " ,
"server" : " gws " ,
"content-length" : " 61587 " ,
"x-xss-protection" : " 0 " ,
"x-frame-options" : " SAMEORIGIN " ,
"set-cookie" : " 1P_JAR=2020-07-16-04; expires=Sat... "
},
"response" : " <!DOCTYPE html>... " ,
"cookies" : [
{
"name" : " NID " ,
"value" : " 204=QE3Ocq15XalczqjuDy52HeseG3zAZuJzID3R57... " ,
"domain" : " .google.com " ,
"path" : " / " ,
"expires" : 1610684149.307722 ,
"size" : 178 ,
"httpOnly" : true ,
"secure" : true ,
"session" : false ,
"sameSite" : " None "
},
{
"name" : " 1P_JAR " ,
"value" : " 2020-07-16-04 " ,
"domain" : " .google.com " ,
"path" : " / " ,
"expires" : 1597464949.307626 ,
"size" : 19 ,
"httpOnly" : false ,
"secure" : true ,
"session" : false ,
"sameSite" : " None "
}
],
"userAgent" : " Windows NT 10.0; Win64; x64) AppleWebKit/5... "
},
"status" : " ok " ,
"message" : " " ,
"startTimestamp" : 1594872947467 ,
"endTimestamp" : 1594872949617 ,
"version" : " 1.0.0 "
}request.post Esto es lo mismo que request.get pero se necesita un parámetro más:
| Parámetro | Notas |
|---|---|
| postdes | Debe ser una cadena con application/x-www-form-urlencoded . Por ejemplo: a=b&c=d |
| Nombre | Por defecto | Notas |
|---|---|---|
| LOG_LEVEL | información | Verbosidad del registro. Use LOG_LEVEL=debug para más información. |
| Log_html | FALSO | Solo para la depuración. Si true todo HTML que pase por el proxy se registrará a la consola en nivel debug . |
| Captcha_solver | ninguno | Método de resolución de Captcha. Se usa cuando se encuentra un Captcha. Vea la sección Captcha Solvers. |
| Tz | UTC | TimeZone utilizado en los registros y el navegador web. Ejemplo: TZ=Europe/London . |
| Lang | ninguno | Lenguaje utilizado en el navegador web. Ejemplo: LANG=en_GB . |
| SIN CABEZA | verdadero | Solo para la depuración. Para ejecutar el navegador web en modo sin cabeza o visible. |
| Navegador_timeout | 40000 | Si está experimentando errores/tiempos de espera porque su sistema es lento, puede intentar aumentar este valor. Recuerde aumentar el parámetro maxTimeout también. |
| Test_url | https://www.google.com | FlaresolverR presenta una solicitud en el inicio para asegurarse de que el navegador web esté funcionando. Puede cambiar esa URL si está bloqueada en su país. |
| PUERTO | 8191 | Puerto de escucha. No necesita cambiar esto si se está ejecutando en Docker. |
| ANFITRIÓN | 0.0.0.0 | Interfaz de escucha. No necesita cambiar esto si se está ejecutando en Docker. |
| Prometheus_enabled | FALSO | Habilitar el exportador de Prometheus. Vea la sección Prometeo a continuación. |
| Prometheus_port | 8192 | Puerto de escucha para el exportador de Prometheus. Vea la sección Prometeo a continuación. |
Las variables de entorno se establecen de manera diferente dependiendo del sistema operativo. Algunos ejemplos:
docker-compose.yml o en el comando Docker CLI.export LOG_LEVEL=debug y luego ejecutar flaresolverr en el mismo shell.cmd.exe , ejecute set LOG_LEVEL=debug y luego ejecute flaresolverr.exe en el mismo shell. El exportador de Prometheus para FlaresolverR está deshabilitado de forma predeterminada. Se puede habilitar con la variable de entorno PROMETHEUS_ENABLED . Si está utilizando Docker, asegúrese de exponer el PROMETHEUS_PORT .
Métricas de ejemplo:
# HELP flaresolverr_request_total Total requests with result
# TYPE flaresolverr_request_total counter
flaresolverr_request_total{domain= " nowsecure.nl " ,result= " solved " } 1.0
# HELP flaresolverr_request_created Total requests with result
# TYPE flaresolverr_request_created gauge
flaresolverr_request_created{domain= " nowsecure.nl " ,result= " solved " } 1.690141657157109e+09
# HELP flaresolverr_request_duration Request duration in seconds
# TYPE flaresolverr_request_duration histogram
flaresolverr_request_duration_bucket{domain= " nowsecure.nl " ,le= " 0.0 " } 0.0
flaresolverr_request_duration_bucket{domain= " nowsecure.nl " ,le= " 10.0 " } 1.0
flaresolverr_request_duration_bucket{domain= " nowsecure.nl " ,le= " 25.0 " } 1.0
flaresolverr_request_duration_bucket{domain= " nowsecure.nl " ,le= " 50.0 " } 1.0
flaresolverr_request_duration_bucket{domain= " nowsecure.nl " ,le= " +Inf " } 1.0
flaresolverr_request_duration_count{domain= " nowsecure.nl " } 1.0
flaresolverr_request_duration_sum{domain= " nowsecure.nl " } 5.858
# HELP flaresolverr_request_duration_created Request duration in seconds
# TYPE flaresolverr_request_duration_created gauge
flaresolverr_request_duration_created{domain= " nowsecure.nl " } 1.6901416571570296e+09ADVERTENCIA En este momento, ninguno de los Solvers de Captcha funciona. Puede verificar el estado en los problemas abiertos. Cualquier ayuda es bienvenida.
A veces, CloudFlare no solo ofrece cálculos matemáticos y pruebas de navegador, a veces también requieren que el usuario resuelva una Captcha. Si este es el caso, FlaresolverR devolverá el error Captcha detected but no automatic solver is configured.
Flaresolverr se puede personalizar para resolver el Captcha automáticamente estableciendo la variable de entorno CAPTCHA_SOLVER en el nombre de archivo de uno de los adaptadores dentro del directorio /Captcha.