SkillAgentSearch skills...

FlareSolverr

Proxy server to bypass Cloudflare protection

Install / Use

/learn @FlareSolverr/FlareSolverr
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

FlareSolverr

Latest release Docker Pulls Docker Stars GitHub issues GitHub pull requests GitHub Repo stars

ko-fi

FlareSolverr is a proxy server to bypass Cloudflare and DDoS-GUARD protection.

How it works

FlareSolverr starts a proxy server, and it waits for user requests in an idle state using few resources. When some request arrives, it uses Selenium with the undetected-chromedriver to create a web browser (Chrome). It opens the URL with user parameters and waits until the Cloudflare challenge is solved (or timeout). The HTML code and the cookies are sent back to the user, and those cookies can be used to bypass Cloudflare using other HTTP clients.

NOTE: Web browsers consume a lot of memory. If you are running FlareSolverr on a machine with few RAM, do not make many requests at once. With each request a new browser is launched.

It is also possible to use a permanent session. However, if you use sessions, you should make sure to close them as soon as you are done using them.

Installation

Docker

It is recommended to install using a Docker container because the project depends on an external browser that is already included within the image.

Docker images are available in:

  • GitHub Registry => https://github.com/orgs/FlareSolverr/packages/container/package/flaresolverr
  • DockerHub => https://hub.docker.com/r/flaresolverr/flaresolverr

Supported architectures are:

| Architecture | Tag | | ------------ | ------------ | | x86 | linux/386 | | x86-64 | linux/amd64 | | ARM32 | linux/arm/v7 | | ARM64 | linux/arm64 |

We provide a docker-compose.yml configuration file. Clone this repository and execute docker-compose up -d (Compose V1) or docker compose up -d (Compose V2) to start the container.

If you prefer the docker cli execute the following command:

Bash

docker run -d \
  --name=flaresolverr \
  -p 8191:8191 \
  -e LOG_LEVEL=info \
  --restart unless-stopped \
  ghcr.io/flaresolverr/flaresolverr:latest

Command Prompt or Powershell

docker run -d --name=flaresolverr -p 8191:8191 -e LOG_LEVEL=info --restart unless-stopped ghcr.io/flaresolverr/flaresolverr:latest

If your host OS is Debian, make sure libseccomp2 version is 2.5.x. You can check the version with sudo apt-cache policy libseccomp2 and update the package with sudo apt install libseccomp2=2.5.1-1~bpo10+1 or sudo apt install libseccomp2=2.5.1-1+deb11u1. Remember to restart the Docker daemon and the container after the update.

Precompiled binaries

Warning Precompiled binaries are only available for x64 architecture. For other architectures see Docker images.

This is the recommended way for Windows users.

  • Download the FlareSolverr executable from the release's page. It is available for Windows x64 and Linux x64.
  • Execute FlareSolverr binary. In the environment variables section you can find how to change the configuration.

From source code

Warning Installing from source code only works for x64 architecture. For other architectures see Docker images.

  • Install Python 3.13.
  • Install Chrome (all OS) or Chromium (just Linux, it doesn't work in Windows) web browser.
  • (Only in Linux) Install Xvfb package.
  • (Only in macOS) Install XQuartz package.
  • Clone this repository and open a shell in that path.
  • Run pip install -r requirements.txt command to install FlareSolverr dependencies.
  • Run python src/flaresolverr.py command to start FlareSolverr.

From source code (FreeBSD/TrueNAS CORE)

  • Run pkg install chromium python313 py313-pip xorg-vfbserver command to install the required dependencies.
  • Clone this repository and open a shell in that path.
  • Run python3.13 -m pip install -r requirements.txt command to install FlareSolverr dependencies.
  • Run python3.13 src/flaresolverr.py command to start FlareSolverr.

Systemd service

We provide an example Systemd unit file flaresolverr.service as reference. You have to modify the file to suit your needs: paths, user and environment variables.

Usage

Example Bash request:

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
}'

Example Python request:

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)

Example PowerShell request:

$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 $body

Commands

+ sessions.create

This will launch a new browser instance which will retain cookies until you destroy it with sessions.destroy. This comes in handy, so you don't have to keep solving challenges over and over and you won't need to keep sending cookies for the browser to use.

This also speeds up the requests since it won't have to launch a new browser instance for every request.

| Parameter | Notes | | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | session | Optional. The session ID that you want to be assigned to the instance. If isn't set a random UUID will be assigned. | | proxy | Optional, default disabled. Eg: "proxy": {"url": "http://127.0.0.1:8888"}. You must include the proxy schema in the URL: http://, socks4:// or socks5://. Authorization (username/password) is supported. Eg: "proxy": {"url": "http://127.0.0.1:8888", "username": "testuser", "password": "testpass"} |

+ sessions.list

Returns a list of all the active sessions. More for debugging if you are curious to see how many sessions are running. You should always make sure to properly close each session when you are done using them as too many may slow your computer down.

Example response:

{
  "sessions": ["session_id_1", "session_id_2", "session_id_3..."]
}

+ sessions.destroy

This will properly shutdown a browser instance and remove all files associated with it to free up resources for a new session. When you no longer need to use a session you should make sure to close it.

| Parameter | Notes | | --------- | --------------------------------------------- | | session | The session ID that you want to be destroyed. |

+ request.get

| Parameter | Notes | | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | url | Mandatory | | session | Optional. Will send the request from and existing browser instance. If one is not sent it will create a temporary instance that will b

View on GitHub
GitHub Stars13.3k
CategoryDevelopment
Updated1h ago
Forks1.1k

Languages

Python

Security Score

100/100

Audited on Mar 27, 2026

No findings