mirror of
https://github.com/FlareSolverr/FlareSolverr.git
synced 2025-06-08 20:45:27 +00:00
114 lines
3.3 KiB
Markdown
114 lines
3.3 KiB
Markdown
## FlareSolverr
|
|
|
|
Proxy server to bypass Cloudflare protection
|
|
|
|
:warning: This project is in beta state. Some things may not work and the API can change at any time.
|
|
See the known issues section.
|
|
|
|
### How it works
|
|
|
|
FlareSolverr starts a proxy server and it waits for user requests in idle state using few resources.
|
|
When some request arrives, it uses [puppeteer](https://github.com/puppeteer/puppeteer) with the
|
|
[stealth plugin](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)
|
|
to create an headless 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.
|
|
|
|
### Installation
|
|
|
|
It requires NodeJS.
|
|
|
|
Run `npm install` to install FlareSolverr dependencies.
|
|
|
|
### Usage
|
|
|
|
Run `node index.js` to start FlareSolverr.
|
|
|
|
Example request:
|
|
```bash
|
|
curl -L -X POST 'http://localhost:8191/v1' \
|
|
-H 'Content-Type: application/json' \
|
|
--data-raw '{
|
|
"url":"http://www.google.com/",
|
|
"userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0"
|
|
}'
|
|
```
|
|
Parameter | Notes
|
|
|--|--|
|
|
url | Mandatory
|
|
userAgent | Optional. Will be used by the headless browser
|
|
|
|
Example response:
|
|
```json
|
|
{
|
|
"status": "ok",
|
|
"message": "",
|
|
"startTimestamp": 1591679463498,
|
|
"endTimestamp": 1591679472781,
|
|
"version": "1.0.0",
|
|
"solution": {
|
|
"url": "https://www.google.com/?gws_rd=ssl",
|
|
"response": "<!DOCTYPE html><html ...",
|
|
"cookies": [
|
|
{
|
|
"name": "ANID",
|
|
"value": "AHWqTUnRRMcmD0SxIOLAhv88SiY555FZpb4jeYCaSNZPHtYyBuY85AmaZEqLFTHe",
|
|
"domain": ".google.com",
|
|
"path": "/",
|
|
"expires": 1625375465.915947,
|
|
"size": 68,
|
|
"httpOnly": true,
|
|
"secure": true,
|
|
"session": false,
|
|
"sameSite": "None"
|
|
},
|
|
{
|
|
"name": "1P_JAR",
|
|
"value": "2020-6-9-5",
|
|
"domain": ".google.com",
|
|
"path": "/",
|
|
"expires": 1594271465,
|
|
"size": 16,
|
|
"httpOnly": false,
|
|
"secure": true,
|
|
"session": false
|
|
}
|
|
],
|
|
"userAgent": " Mozilla/5.0 (X11; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0"
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Environment variables
|
|
|
|
To set the environment vars in Linux run `export LOG_LEVEL=debug` and then start FlareSolverr in the same shell.
|
|
|
|
Name | Default value
|
|
|--|--|
|
|
LOG_LEVEL | info
|
|
LOG_HTML | false
|
|
PORT | 8191
|
|
HOST | 0.0.0.0
|
|
|
|
### Docker
|
|
|
|
You can edit environment variables in `./Dockerfile` and build your own image.
|
|
|
|
```bash
|
|
docker build -t flaresolverr:latest .
|
|
docker run --restart=always --name flaresolverr -p 8191:8191 -d flaresolverr:latest
|
|
```
|
|
|
|
### Known issues / Roadmap
|
|
|
|
The current implementation is not able to bypass Cloudflare because they are detecting the headless browser.
|
|
I hope this will be fixed soon in the [puppeteer stealth plugin](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)
|
|
|
|
TODO:
|
|
* Fix remaining issues in the code (see TODOs)
|
|
* Make the maxTimeout configurable by the user
|
|
* Add support for more HTTP methods (POST, PUT, DELETE ...)
|
|
* Add support for user HTTP headers
|
|
* Hide sensitive information in logs
|
|
* Reduce Docker image size
|