Flaresolverr เป็นพร็อกซีเซิร์ฟเวอร์เพื่อข้ามการป้องกัน CloudFlare และ DDOS-Guard
Flaresolverr เริ่มต้นพร็อกซีเซิร์ฟเวอร์และรอการร้องขอผู้ใช้ในสถานะว่างโดยใช้ทรัพยากรไม่กี่อย่าง เมื่อมีการร้องขอบางอย่างจะใช้ซีลีเนียมกับตัวตรวจสอบที่ตรวจพบเพื่อสร้างเว็บเบราว์เซอร์ (Chrome) มันเปิด URL ด้วยพารามิเตอร์ผู้ใช้และรอจนกว่าความท้าทายของ CloudFlare จะได้รับการแก้ไข (หรือหมดเวลา) รหัส HTML และคุกกี้จะถูกส่งกลับไปยังผู้ใช้และสามารถใช้คุกกี้เหล่านั้นเพื่อข้าม CloudFlare โดยใช้ไคลเอนต์ HTTP อื่น ๆ
หมายเหตุ : เว็บเบราว์เซอร์ใช้หน่วยความจำมากมาย หากคุณกำลังใช้งาน flaresolverr บนเครื่องที่มี RAM เพียงไม่กี่ตัวอย่าร้องขอจำนวนมากในครั้งเดียว ด้วยการร้องขอแต่ละเบราว์เซอร์ใหม่จะเปิดตัว
นอกจากนี้ยังเป็นไปได้ที่จะใช้เซสชันถาวร อย่างไรก็ตามหากคุณใช้เซสชันคุณควรตรวจสอบให้แน่ใจว่าได้ปิดทันทีที่คุณใช้งาน
ขอแนะนำให้ติดตั้งโดยใช้คอนเทนเนอร์ Docker เนื่องจากโครงการขึ้นอยู่กับเบราว์เซอร์ภายนอกที่รวมอยู่ในภาพแล้ว
ภาพนักเทียบท่ามีอยู่ใน:
สถาปัตยกรรมที่ได้รับการสนับสนุนคือ:
| สถาปัตยกรรม | ติดแท็ก |
|---|---|
| x86 | Linux/386 |
| x86-64 | Linux/AMD64 |
| ARM32 | linux/arm/v7 |
| ARM64 | Linux/arm64 |
เราให้ไฟล์กำหนดค่า docker-compose.yml โคลนที่เก็บนี้และดำเนินการ docker-compose up -d (PISCOSE V1) หรือ docker compose up -d (PISCOSE V2) เพื่อเริ่มคอนเทนเนอร์
หากคุณต้องการ docker cli ดำเนินการคำสั่งต่อไปนี้
docker run -d
--name=flaresolverr
-p 8191:8191
-e LOG_LEVEL=info
--restart unless-stopped
ghcr.io/flaresolverr/flaresolverr:latest หากระบบปฏิบัติการโฮสต์ของคุณเป็น 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 Daemon และคอนเทนเนอร์หลังจากการอัปเดต
คำเตือน ไบนารีที่คอมไพล์ล่วงหน้ามีให้บริการเฉพาะสำหรับสถาปัตยกรรม x64 เท่านั้น สำหรับสถาปัตยกรรมอื่น ๆ ให้ดูภาพ Docker
นี่เป็นวิธีที่แนะนำสำหรับผู้ใช้ Windows
คำเตือน การติดตั้งจากซอร์สโค้ดใช้งานได้สำหรับสถาปัตยกรรม x64 เท่านั้น สำหรับสถาปัตยกรรมอื่น ๆ ให้ดูภาพ Docker
pip install -r requirements.txt คำสั่งเพื่อติดตั้งการพึ่งพา flaresolverrpython src/flaresolverr.py เพื่อเริ่ม flaresolverrpkg install chromium python39 py39-pip xorg-vfbserver คำสั่งเพื่อติดตั้งการพึ่งพาที่ต้องการpython3.9 -m pip install -r requirements.txt คำสั่งเพื่อติดตั้งการพึ่งพา flaresolverrpython3.9 src/flaresolverr.py เพื่อเริ่ม flaresolverr เราให้ตัวอย่างไฟล์ SystemD UNIT 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 Destroy สิ่งนี้มีประโยชน์ดังนั้นคุณไม่จำเป็นต้องแก้ปัญหาความท้าทายซ้ำแล้วซ้ำอีกและคุณไม่จำเป็นต้องส่งคุกกี้เพื่อให้เบราว์เซอร์ใช้
นอกจากนี้ยังช่วยเพิ่มความเร็วในการร้องขอเนื่องจากไม่ต้องเปิดอินสแตนซ์เบราว์เซอร์ใหม่สำหรับทุกคำขอ
| พารามิเตอร์ | หมายเหตุ |
|---|---|
| การประชุม | ไม่จำเป็น. รหัสเซสชันที่คุณต้องการได้รับมอบหมายให้กับอินสแตนซ์ หากไม่ได้ตั้งค่า 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สิ่งนี้จะปิดอินสแตนซ์ของเบราว์เซอร์อย่างถูกต้องและลบไฟล์ทั้งหมดที่เกี่ยวข้องเพื่อเพิ่มทรัพยากรสำหรับเซสชันใหม่ เมื่อคุณไม่จำเป็นต้องใช้เซสชันอีกต่อไปคุณควรตรวจสอบให้แน่ใจว่าได้ปิด
| พารามิเตอร์ | หมายเหตุ |
|---|---|
| การประชุม | รหัสเซสชันที่คุณต้องการถูกทำลาย |
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 เช่น: a=b&c=d |
| ชื่อ | ค่าเริ่มต้น | หมายเหตุ |
|---|---|---|
| log_level | ข้อมูล | คำฟางของการบันทึก ใช้ LOG_LEVEL=debug สำหรับข้อมูลเพิ่มเติม |
| log_html | เท็จ | สำหรับการดีบักเท่านั้น หากเป็น true HTML ทั้งหมดที่ผ่านพร็อกซีจะถูกบันทึกไปยังคอนโซลในระดับ debug |
| captcha_solver | ไม่มี | วิธีการแก้ Captcha มันถูกใช้เมื่อพบ captcha ดูส่วน Captcha Solvers |
| TZ | UTC | เขตเวลาที่ใช้ในบันทึกและเว็บเบราว์เซอร์ ตัวอย่าง: TZ=Europe/London |
| หรั่ง | ไม่มี | ภาษาที่ใช้ในเว็บเบราว์เซอร์ ตัวอย่าง: LANG=en_GB |
| ไม่มีหัว | จริง | สำหรับการดีบักเท่านั้น ในการเรียกใช้เว็บเบราว์เซอร์ในโหมดหัวขาดหรือมองเห็นได้ |
| เบราว์เซอร์ _timeout | 40000 | หากคุณกำลังประสบกับข้อผิดพลาด/การหมดเวลาเนื่องจากระบบของคุณช้าคุณสามารถลองเพิ่มค่านี้ได้ อย่าลืมเพิ่มพารามิเตอร์ maxTimeout ด้วย |
| test_url | https://www.google.com | Flaresolverr ขอเริ่มต้นเพื่อให้แน่ใจว่าเว็บเบราว์เซอร์ใช้งานได้ คุณสามารถเปลี่ยน URL นั้นได้หากถูกบล็อกในประเทศของคุณ |
| ท่าเรือ | 8191 | พอร์ตฟัง คุณไม่จำเป็นต้องเปลี่ยนสิ่งนี้หากคุณใช้ Docker |
| เจ้าภาพ | 0.0.0.0 | การฟังอินเทอร์เฟซ คุณไม่จำเป็นต้องเปลี่ยนสิ่งนี้หากคุณใช้ Docker |
| prometheus_enabled | เท็จ | เปิดใช้งานผู้ส่งออกโพร ดูส่วน Prometheus ด้านล่าง |
| prometheus_port | 8192 | การฟังพอร์ตสำหรับผู้ส่งออกโพร ดูส่วน Prometheus ด้านล่าง |
ตัวแปรสภาพแวดล้อมถูกตั้งค่าแตกต่างกันไปขึ้นอยู่กับระบบปฏิบัติการ ตัวอย่างบางส่วน:
docker-compose.yml หรือในคำสั่ง Docker CLIexport LOG_LEVEL=debug จากนั้นเรียกใช้ flaresolverr ในเชลล์เดียวกันcmd.exe , เรียกใช้ set LOG_LEVEL=debug จากนั้นเรียกใช้ flaresolverr.exe ในเชลล์เดียวกัน ผู้ส่งออก Prometheus สำหรับ Flaresolverr ถูกปิดใช้งานโดยค่าเริ่มต้น สามารถเปิดใช้งานได้ด้วยตัวแปรสภาพแวดล้อม 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 ไม่เพียง แต่ให้การคำนวณทางคณิตศาสตร์และการทดสอบเบราว์เซอร์บางครั้งพวกเขายังต้องการให้ผู้ใช้แก้ปัญหา CAPTCHA หากเป็นกรณีนี้ Flaresolverr จะส่งคืนข้อผิดพลาด Captcha detected but no automatic solver is configured.
Flaresolverr สามารถปรับแต่งเพื่อแก้ไข Captcha โดยอัตโนมัติโดยการตั้งค่าตัวแปรสภาพแวดล้อม CAPTCHA_SOLVER เป็นชื่อไฟล์ของหนึ่งในอะแดปเตอร์ภายในไดเรกทอรี /CAPTCHA