Flaresolverr est un serveur proxy pour contourner CloudFlare et la protection DDOS-Guard.
Flaresolverr démarre un serveur proxy, et il attend des demandes d'utilisateurs dans un état d'inactivité en utilisant quelques ressources. Lorsqu'une demande arrive, il utilise le sélénium avec le chromédriver non détecté pour créer un navigateur Web (Chrome). Il ouvre l'URL avec les paramètres de l'utilisateur et attend que le défi CloudFlare soit résolu (ou délai d'expiration). Le code HTML et les cookies sont renvoyés à l'utilisateur, et ces cookies peuvent être utilisés pour contourner CloudFlare à l'aide d'autres clients HTTP.
Remarque : les navigateurs Web consomment beaucoup de mémoire. Si vous exécutez Flaresolverr sur une machine avec peu de RAM, ne faites pas beaucoup de demandes à la fois. À chaque demande, un nouveau navigateur est lancé.
Il est également possible d'utiliser une session permanente. Cependant, si vous utilisez des sessions, vous devez vous assurer de les fermer dès que vous avez fini de les utiliser.
Il est recommandé d'installer à l'aide d'un conteneur Docker car le projet dépend d'un navigateur externe qui est déjà inclus dans l'image.
Les images Docker sont disponibles dans:
Les architectures supportées sont:
| Architecture | Étiqueter |
|---|---|
| x86 | Linux / 386 |
| x86-64 | Linux / AMD64 |
| ARM32 | Linux / ARM / V7 |
| ARM64 | Linux / ARM64 |
Nous fournissons un fichier de configuration docker-compose.yml . Clone ce référentiel et exécuter docker-compose up -d (compose v1) ou docker compose up -d (compose v2) pour démarrer le conteneur.
Si vous préférez que docker cli exécute la commande suivante.
docker run -d
--name=flaresolverr
-p 8191:8191
-e LOG_LEVEL=info
--restart unless-stopped
ghcr.io/flaresolverr/flaresolverr:latest Si votre système d'exploitation hôte est Debian, assurez-vous que la version libseccomp2 est 2.5.x. Vous pouvez consulter la version avec sudo apt-cache policy libseccomp2 et mettre à jour le package avec sudo apt install libseccomp2=2.5.1-1~bpo10+1 ou sudo apt install libseccomp2=2.5.1-1+deb11u1 . N'oubliez pas de redémarrer le démon docker et le conteneur après la mise à jour.
AVERTISSEMENT Les binaires précompilés ne sont disponibles que pour l'architecture x64. Pour d'autres architectures, voir Docker Images.
C'est le moyen recommandé pour les utilisateurs de Windows.
L'installation d'avertissement à partir du code source fonctionne uniquement pour l'architecture x64. Pour d'autres architectures, voir Docker Images.
pip install -r requirements.txt Pour installer les dépendances Flaresolverr.python src/flaresolverr.py Commande pour démarrer Flaresolverr.pkg install chromium python39 py39-pip xorg-vfbserver Commande pour installer les dépendances requises.python3.9 -m pip install -r requirements.txt Commande pour installer les dépendances Flaresolverr.python3.9 src/flaresolverr.py Commande pour démarrer Flaresolverr. Nous fournissons un exemple de fichier d'unité Systemd flaresolverr.service comme référence. Vous devez modifier le fichier en fonction de vos besoins: chemins de chemins, utilisateurs et variables d'environnement.
Exemple de demande de bash:
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
} 'Exemple de demande 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 )Exemple de demande 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 Cela lancera une nouvelle instance de navigateur qui conservera des cookies jusqu'à ce que vous le détruisez avec sessions.destroy . Cela est utile, vous n'avez donc pas à continuer de résoudre des défis encore et encore et vous n'aurez pas besoin de continuer à envoyer des cookies pour le navigateur.
Cela accélère également les demandes car il n'aura pas à lancer une nouvelle instance de navigateur pour chaque demande.
| Paramètre | Notes |
|---|---|
| session | Facultatif. L'ID de session que vous souhaitez être affecté à l'instance. Si ce n'est pas défini, un UUID aléatoire sera attribué. |
| procuration | Facultatif, désactivé par défaut. EG: "proxy": {"url": "http://127.0.0.1:8888"} . Vous devez inclure le schéma proxy dans l'URL: http:// , socks4:// ou socks5:// . L'autorisation (nom d'utilisateur / mot de passe) est prise en charge. EG: "proxy": {"url": "http://127.0.0.1:8888", "username": "testuser", "password": "testpass"} |
sessions.listRenvoie une liste de toutes les sessions actives. Plus pour le débogage si vous êtes curieux de voir combien de sessions se déroulent. Vous devez toujours vous assurer de fermer correctement chaque session lorsque vous avez terminé en les utilisant car trop peuvent ralentir votre ordinateur.
Exemple de réponse:
{
"sessions" : [
" session_id_1 " ,
" session_id_2 " ,
" session_id_3... "
]
}sessions.destroyCela arrêtera correctement une instance de navigateur et supprimera tous les fichiers qui lui sont associés pour libérer des ressources pour une nouvelle session. Lorsque vous n'avez plus besoin d'utiliser une session, vous devez vous assurer de le fermer.
| Paramètre | Notes |
|---|---|
| session | L'ID de session que vous voulez être détruit. |
request.get| Paramètre | Notes |
|---|---|
| URL | Obligatoire |
| session | Facultatif. Enverra la demande et l'instance de navigateur existante. Si l'on n'est pas envoyé, il créera une instance temporaire qui sera détruite immédiatement une fois la demande terminée. |
| session_ttl_minutes | Facultatif. Flaresolverr tournera automatiquement des séances expirées en fonction du TTL fourni en minutes. |
| maxtimeout | Valeur facultative par défaut 60000. Timeout max pour résoudre le défi en millisecondes. |
| cookies | Facultatif. Sera utilisé par le navigateur sans tête. EG: "cookies": [{"name": "cookie1", "value": "value1"}, {"name": "cookie2", "value": "value2"}] . |
| Retournlycookies | FAUXE, FAUX par défaut. Renvoie uniquement les cookies. Les données de réponse, les en-têtes et autres parties de la réponse sont supprimées. |
| procuration | Facultatif, désactivé par défaut. EG: "proxy": {"url": "http://127.0.0.1:8888"} . Vous devez inclure le schéma proxy dans l'URL: http:// , socks4:// ou socks5:// . L'autorisation (nom d'utilisateur / mot de passe) n'est pas prise en charge. (Lorsque le paramètre session est défini, le proxy est ignoré; un proxy spécifique à la session peut être défini dans sessions.create .) |
AVERTISSEMENT Si vous souhaitez utiliser CloudFlare Clearance Cookie dans vos scripts, assurez-vous d'utiliser également l'agent utilisateur de Flaresolverr. S'ils ne correspondent pas, vous verrez le défi.
Exemple de réponse de l'exécution de la curl ci-dessus:
{
"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 C'est la même chose que request.get mais il faut un param de plus:
| Paramètre | Notes |
|---|---|
| post-data | Doit être une chaîne avec application/x-www-form-urlencoded . Par exemple: a=b&c=d |
| Nom | Défaut | Notes |
|---|---|---|
| Log_level | informations | Verbosité de l'exploitation forestière. Utilisez LOG_LEVEL=debug pour plus d'informations. |
| Log_html | FAUX | Uniquement pour le débogage. Si true TOUT HTML qui passe par le proxy sera enregistré à la console au niveau debug . |
| Captcha_solver | aucun | Méthode de résolution de captcha. Il est utilisé lorsqu'un captcha est rencontré. Voir la section CAPTCHA SOLVERS. |
| Tz | UTC | Fuseau horaire utilisé dans les journaux et le navigateur Web. Exemple: TZ=Europe/London . |
| Égouter | aucun | Langue utilisée dans le navigateur Web. Exemple: LANG=en_GB . |
| SANS TÊTE | vrai | Uniquement pour le débogage. Pour exécuter le navigateur Web en mode sans tête ou visible. |
| Browser_timeout | 40000 | Si vous vivez des erreurs / délais d'attente car votre système est lent, vous pouvez essayer d'augmenter cette valeur. N'oubliez pas d'augmenter également le paramètre maxTimeout . |
| Test_url | https://www.google.com | Flaresolverr fait une demande au début pour s'assurer que le navigateur Web fonctionne. Vous pouvez changer cette URL si elle est bloquée dans votre pays. |
| PORT | 8191 | Port d'écoute. Vous n'avez pas besoin de changer cela si vous utilisez Docker. |
| HÔTE | 0.0.0.0 | Interface d'écoute. Vous n'avez pas besoin de changer cela si vous utilisez Docker. |
| Prometheus_enabled | FAUX | Activer l'exportateur de Prométhée. Voir la section Prometheus ci-dessous. |
| Prometheus_port | 8192 | Port d'écoute pour l'exportateur de Prometheus. Voir la section Prometheus ci-dessous. |
Les variables d'environnement sont définies différemment en fonction du système d'exploitation. Quelques exemples:
docker-compose.yml ou dans la commande docker CLI.export LOG_LEVEL=debug puis exécutez flaresolverr dans le même shell.cmd.exe , exécutez set LOG_LEVEL=debug puis exécutez flaresolverr.exe dans le même shell. L'exportateur de Prométhée pour Flaresolverr est désactivé par défaut. Il peut être activé avec la variable d'environnement PROMETHEUS_ENABLED . Si vous utilisez Docker, assurez-vous d'exposer le PROMETHEUS_PORT .
Exemple de mesures:
# 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+09AVERTISSEMENT À LET TRÈS, aucun des solveurs CAPTCHA ne fonctionne. Vous pouvez vérifier l'état dans les problèmes ouverts. Toute aide est la bienvenue.
Parfois, CloudFlare donne non seulement des calculs mathématiques et des tests de navigateur, parfois ils nécessitent également que l'utilisateur résolve un captcha. Si tel est le cas, Flaresolverr renvoie l'erreur Captcha detected but no automatic solver is configured.
Flaresolverr peut être personnalisé pour résoudre automatiquement le captcha en définissant la variable d'environnement CAPTCHA_SOLVER sur le nom de fichier de l'un des adaptateurs à l'intérieur du répertoire / captcha.