Flaresolverr是绕过Cloudflare和DDOS-GUARD保护的代理服务器。
Flaresolverr启动了代理服务器,它使用很少的资源在空闲状态下等待用户请求。当某些请求到达时,它将使用未检测到的冰淇淋的硒来创建Web浏览器(Chrome)。它使用用户参数打开URL,并等待直到解决CloudFlare挑战(或超时)。 HTML代码和Cookie被发送回用户,这些Cookie可用于使用其他HTTP客户端绕过Cloudflare。
注意:Web浏览器会消耗大量内存。如果您在很少有RAM的机器上运行Flaresolverr,请不要一次提出很多请求。每个请求都会启动新的浏览器。
也可以使用永久会话。但是,如果您使用会议,则应确保在使用它们后立即关闭它们。
建议使用Docker容器安装,因为该项目取决于图像中已包含的外部浏览器。
Docker图像可在:
支持的体系结构是:
| 建筑学 | 标签 |
|---|---|
| x86 | Linux/386 |
| X86-64 | Linux/AMD64 |
| ARM32 | Linux/ARM/V7 |
| ARM64 | Linux/ARM64 |
我们提供一个docker-compose.yml配置文件。克隆此存储库并执行docker-compose up -d (Compose V1)或docker compose up -d (Compose V2)以启动容器。
如果您希望docker cli执行以下命令。
docker run -d
--name=flaresolverr
-p 8191:8191
-e LOG_LEVEL=info
--restart unless-stopped
ghcr.io/flaresolverr/flaresolverr:latest如果您的主机OS是Debian,请确保libseccomp2版本为2.5.x。您可以使用sudo apt-cache policy libseccomp2检查版本,并使用sudo apt install libseccomp2=2.5.1-1~bpo10+1或sudo apt install libseccomp2=2.5.1-1+deb11u1更新软件包。请记住,更新后要重新启动Docker守护程序和容器。
警告预编译的二进制文件仅适用于X64架构。有关其他体系结构,请参见Docker图像。
这是Windows用户的推荐方法。
从源代码安装的警告仅适用于X64架构。有关其他体系结构,请参见Docker图像。
pip install -r requirements.txt命令以安装Flaresolverr依赖关系。python src/flaresolverr.py命令以启动Flaresolverr。pkg install chromium python39 py39-pip xorg-vfbserver命令以安装所需的依赖项。python3.9 -m pip install -r requirements.txt命令以安装flaresolverr依赖关系。python3.9 src/flaresolverr.py命令启动flaresolverr。我们提供了一个示例SystemD单元文件flaresolverr.service作为参考。您必须修改文件以适合您的需求:路径,用户和环境变量。
示例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
} '示例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 )示例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这将启动一个新的浏览器实例,该实例将保留cookie,直到您用sessions.destroy将其销毁。这很方便,因此您不必一遍又一遍地解决挑战,也不需要继续发送cookie供浏览器使用。
这也加快了请求的速度,因为它不必为每个请求启动新的浏览器实例。
| 范围 | 笔记 |
|---|---|
| 会议 | 选修的。您要分配给实例的会话ID。如果未设置,将分配随机的UUID。 |
| 代理人 | 可选,默认禁用。例如: "proxy": {"url": "http://127.0.0.1:8888"} 。您必须在URL中包含代理架构: http:// , socks4://或socks5:// 。支持授权(用户名/密码)。例如: "proxy": {"url": "http://127.0.0.1:8888", "username": "testuser", "password": "testpass"} |
sessions.list返回所有活动会议的列表。如果您很好奇,请查看正在运行多少个会话。使用它们完成后,您应该始终确保每个会话都正确关闭,因为太多的计算机可能会减慢计算机的速度。
示例响应:
{
"sessions" : [
" session_id_1 " ,
" session_id_2 " ,
" session_id_3... "
]
}sessions.destroy这将正确关闭浏览器实例,并删除与之关联的所有文件,以释放新会话的资源。当您不再需要使用会话时,应确保将其关闭。
| 范围 | 笔记 |
|---|---|
| 会议 | 您想被销毁的会话ID。 |
request.get| 范围 | 笔记 |
|---|---|
| URL | 强制的 |
| 会议 | 选修的。将从和现有浏览器实例发送请求。如果未发送,它将创建一个临时实例,该实例将在请求完成后立即被销毁。 |
| session_ttl_minutes | 选修的。 Flaresolverr将根据几分钟内提供的TTL自动旋转过期的会话。 |
| maxtimeout | 可选的,默认值60000。最大超时以毫秒为单位解决挑战。 |
| 曲奇饼 | 选修的。无头浏览器将使用。例如: "cookies": [{"name": "cookie1", "value": "value1"}, {"name": "cookie2", "value": "value2"}] 。 |
| returnonlycookies | 可选,默认错误。仅返回cookie。响应数据,标题和其他部分被删除。 |
| 代理人 | 可选,默认禁用。例如: "proxy": {"url": "http://127.0.0.1:8888"} 。您必须在URL中包含代理架构: http:// , socks4://或socks5:// 。不支持授权(用户名/密码)。 (设置session参数时,忽略了代理;可以在sessions.create中设置会话特定的代理。) |
警告如果您想在脚本中使用CloudFlare Clearance Cookie,请确保也使用Flaresolverr用户代理。如果他们不匹配,您将看到挑战。
从上面运行curl的示例响应:
{
"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这与request.get相同。
| 范围 | 笔记 |
|---|---|
| PostData | 必须是具有application/x-www-form-urlencoded的字符串。例如: a=b&c=d |
| 姓名 | 默认 | 笔记 |
|---|---|---|
| log_level | 信息 | 伐木的详细性。使用LOG_LEVEL=debug以获取更多信息。 |
| log_html | 错误的 | 仅用于调试。如果true所有通过代理的HTML将以debug级别登录到控制台。 |
| CATCCHA_SOLVER | 没有任何 | 验证码解决方法。遇到验证码时使用。请参阅“验证码求解器”部分。 |
| TZ | 世界标准时间 | 日志和Web浏览器中使用的时区。示例: TZ=Europe/London 。 |
| 朗 | 没有任何 | Web浏览器中使用的语言。示例: LANG=en_GB 。 |
| 无头 | 真的 | 仅用于调试。以无头模式或可见的方式运行Web浏览器。 |
| browser_timeout | 40000 | 如果您的系统速度很慢,则遇到错误/超时,您可以尝试提高此值。请记住也增加了maxTimeout参数。 |
| test_url | https://www.google.com | Flaresolverr开始时提出了请求,以确保Web浏览器正常工作。如果您的国家 /地区被阻止,则可以更改该URL。 |
| 港口 | 8191 | 聆听端口。如果您在Docker上跑步,则无需更改。 |
| 主持人 | 0.0.0.0 | 听力接口。如果您在Docker上跑步,则无需更改。 |
| Prometheus_enabled | 错误的 | 启用普罗米修斯出口商。请参阅下面的Prometheus部分。 |
| Prometheus_port | 8192 | Prometheus出口商的聆听端口。请参阅下面的Prometheus部分。 |
根据操作系统,环境变量的设置不同。一些例子:
docker-compose.yml文件或docker cli命令中设置环境变量。export LOG_LEVEL=debug ,然后在同一外壳中运行flaresolverr 。cmd.exe ,运行set LOG_LEVEL=debug ,然后在同一外壳中运行flaresolverr.exe 。 默认情况下禁用了Flaresolverr的Prometheus出口商。可以使用环境变量PROMETHEUS_ENABLED启用它。如果您使用的是Docker,请确保公开PROMETHEUS_PORT 。
示例指标:
# 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+09此时警告验证码求解器都无法使用。您可以在开放问题中检查状态。欢迎任何帮助。
有时,CloudFlare不仅给出数学计算和浏览器测试,有时它们还需要用户求解验证码。如果是这种情况,Flaresolverr将返回Captcha detected but no automatic solver is configured.
可以自定义Flaresolverr来自动求解验证码,从而将环境变量CAPTCHA_SOLVER设置为 /码头目录中的一个适配器的文件名。