Flaresolverr는 CloudFlare 및 DDos-Guard Protection을 우회하는 프록시 서버입니다.
Flaresolverr는 프록시 서버를 시작하며 몇 가지 리소스를 사용하여 유휴 상태에서 사용자 요청을 기다립니다. 일부 요청이 도착하면 검출되지 않은 Chromedriver와 함께 셀레늄을 사용하여 웹 브라우저 (Chrome)를 만듭니다. 사용자 매개 변수가있는 URL을 열고 CloudFlare 챌린지가 해결 될 때까지 기다립니다 (또는 시간 초과). HTML 코드와 쿠키는 사용자에게 다시 전송되며 해당 쿠키를 사용하여 다른 HTTP 클라이언트를 사용하여 CloudFlare를 우회 할 수 있습니다.
참고 : 웹 브라우저는 많은 메모리를 소비합니다. RAM이 거의없는 기계에서 Flaresolverr를 실행하는 경우 한 번에 많은 요청을하지 마십시오. 각 요청에 따라 새 브라우저가 시작됩니다.
영구 세션을 사용할 수도 있습니다. 그러나 세션을 사용하는 경우 세션을 사용하자마자 세션을 닫아야합니다.
프로젝트는 이미지에 이미 포함 된 외부 브라우저에 의존하기 때문에 Docker 컨테이너를 사용하여 설치하는 것이 좋습니다.
Docker 이미지는 다음과 같습니다.
지원되는 아키텍처는 다음과 같습니다.
| 건축학 | 꼬리표 |
|---|---|
| x86 | 리눅스/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가 데비안 인 경우 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 을 실행합니다.python src/flaresolverr.py 명령을 실행하십시오.pkg install chromium python39 py39-pip xorg-vfbserver 명령을 실행하여 필요한 종속성을 설치하십시오.python3.9 -m pip install -r requirements.txt 명령을 실행합니다.python3.9 src/flaresolverr.py 명령을 실행하십시오. 우리는 예제 Systemd 단위 파일 flaresolverr.service 를 참조로 제공합니다. 경로, 사용자 및 환경 변수와 같은 요구에 맞게 파일을 수정해야합니다.
예제 배쉬 요청 :
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 이 쿠키는 쿠키가 sessions.destroy 으로 파괴 될 때까지 쿠키를 유지하는 새로운 브라우저 인스턴스를 시작합니다. 이것은 편리하게 제공되므로 계속해서 도전을 해결할 필요가 없으며 브라우저를 사용할 수 있도록 쿠키를 계속 보내지 않아도됩니다.
또한 모든 요청에 대해 새 브라우저 인스턴스를 시작할 필요가 없기 때문에 요청이 속도가 높아집니다.
| 매개 변수 | 메모 |
|---|---|
| 세션 | 선택 과목. 인스턴스에 할당하려는 세션 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 | 선택 사항, 기본 거짓. 쿠키 만 반환합니다. 응답 데이터, 헤더 및 응답의 다른 부분이 제거됩니다. |
| 대리 | 선택 사항, 기본 비활성화. 예 : "proxy": {"url": "http://127.0.0.1:8888"} . URL에 프록시 스키마를 포함시켜야합니다 : http:// , socks4:// 또는 socks5:// . 인증 (사용자 이름/비밀번호)은 지원되지 않습니다. ( session 매개 변수가 설정되면 프록시는 무시됩니다. 세션 별 프록시는 sessions.create 에서 설정할 수 있습니다. |
경고 스크립트에서 CloudFlare Clearance 쿠키를 사용하려면 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 과 동일하지만 하나 더 매개 변수가 필요합니다.
| 매개 변수 | 메모 |
|---|---|
| 사후 데이터 | application/x-www-form-urlencoded 있는 문자열이어야합니다. EG : a=b&c=d |
| 이름 | 기본 | 메모 |
|---|---|---|
| log_level | 정보 | 벌목의 진실성. 자세한 내용은 LOG_LEVEL=debug 사용하십시오. |
| log_html | 거짓 | 디버깅을 위해서만. 프록시를 통과하는 모든 html이 true 경우 debug 레벨에서 콘솔에 로그인됩니다. |
| CARTCHA_SOLVER | 없음 | 보안 문자 해결 방법. 보안관이 발생할 때 사용됩니다. 보안 문자 솔버 섹션을 참조하십시오. |
| TZ | UTC | 로그 및 웹 브라우저에 사용되는 시간대. 예 : TZ=Europe/London . |
| 랭 | 없음 | 웹 브라우저에 사용되는 언어. 예 : LANG=en_GB . |
| 목이 없는 | 진실 | 디버깅을 위해서만. 웹 브라우저를 헤드리스 모드로 실행하거나 보이도록합니다. |
| Browser_Timeout | 40000 | 시스템이 느리기 때문에 오류/타임 아웃이 발생하는 경우이 값을 늘릴 수 있습니다. maxTimeout 매개 변수도 늘리는 것을 잊지 마십시오. |
| test_url | https://www.google.com | Flaresolverr는 웹 브라우저가 작동하는지 확인하기 위해 시작을 요청합니다. 해당 URL이 해당 국가에서 차단되면 변경할 수 있습니다. |
| 포트 | 8191 | 듣기 포트. Docker에서 실행중인 경우 이것을 변경할 필요가 없습니다. |
| 주인 | 0.0.0.0 | 듣기 인터페이스. Docker에서 실행중인 경우 이것을 변경할 필요가 없습니다. |
| prometheus_enabled | 거짓 | Prometheus Exporter를 활성화하십시오. 아래 프로 메테우스 섹션을 참조하십시오. |
| Prometheus_port | 8192 | Prometheus Expler의 청취 포트. 아래 프로 메테우스 섹션을 참조하십시오. |
환경 변수는 운영 체제에 따라 다르게 설정됩니다. 몇 가지 예 :
docker-compose.yml 파일 또는 Docker CLI 명령에 설정할 수 있습니다.export LOG_LEVEL=debug 실행 한 다음 같은 쉘에서 flaresolverr 실행하십시오.cmd.exe 엽니 다. set LOG_LEVEL=debug 실행 한 다음 같은 쉘에서 flaresolverr.exe 실행하십시오. Flaresolverr의 Prometheus Expler는 기본적으로 비활성화됩니다. 환경 변수 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이때 경고 CAPTCHA 솔버 중 어느 것도 작동하지 않습니다. 열린 문제의 상태를 확인할 수 있습니다. 모든 도움을 환영합니다.
때로는 CloudFlare가 수학 계산 및 브라우저 테스트를 제공 할뿐만 아니라 때로는 사용자가 보안 문자를 해결해야합니다. 이 경우 Flaresolverr는 오류 Captcha detected but no automatic solver is configured.
Flaresolverr는 환경 변수 CAPTCHA_SOLVER /CAPTCHA 디렉토리 내부의 어댑터 중 하나의 파일 이름으로 설정하여 보안 문자를 자동으로 해결하도록 사용자 정의 할 수 있습니다.