Flaresolverr هو خادم وكيل لتجاوز CloudFlare و DDOS-Guard Protection.
يبدأ Flaresolverr خادم الوكيل ، وينتظر طلبات المستخدم في حالة خاملة باستخدام موارد قليلة. عند وصول بعض الطلبات ، فإنه يستخدم السيلينيوم مع chromedriver غير المكتشفة لإنشاء متصفح ويب (Chrome). يفتح عنوان URL مع معلمات المستخدم وينتظر حتى يتم حل تحدي CloudFlare (أو مهلة). يتم إرسال رمز HTML وملفات تعريف الارتباط إلى المستخدم ، ويمكن استخدام ملفات تعريف الارتباط هذه لتجاوز CloudFlare باستخدام عملاء HTTP الآخرين.
ملاحظة : تستهلك متصفحات الويب الكثير من الذاكرة. إذا كنت تقوم بتشغيل 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 إذا كان نظام التشغيل المضيف الخاص بك هو 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 command لتثبيت تبعيات Flaresolverr.python src/flaresolverr.py أمر بدء Flaresolverr.pkg install chromium python39 py39-pip xorg-vfbserver لتثبيت التبعيات المطلوبة.python3.9 -m pip install -r requirements.txt command لتثبيت تبعيات Flaresolverr.python3.9 src/flaresolverr.py أمر بدء Flaresolverr. نحن نقدم مثال ملف وحدة 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
} 'مثال على طلب بيثون:
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 . يأتي هذا في متناول يدي ، لذلك ليس عليك الاستمرار في حل التحديات مرارًا وتكرارًا ولن تحتاج إلى الاستمرار في إرسال ملفات تعريف الارتباط لاستخدامها للمتصفح.
هذا أيضًا يسرع الطلبات لأنه لن يضطر إلى تشغيل مثيل متصفح جديد لكل طلب.
| المعلمة | ملحوظات |
|---|---|
| حصة | خياري. معرف الجلسة الذي تريد تعيينه إلى المثيل. إذا لم يتم تعيين 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. Max Timeout لحل التحدي بالمللي ثانية. |
| ملفات تعريف الارتباط | خياري. سيتم استخدامها من قبل المتصفح مقطوعة الرأس. على سبيل المثال: "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 Delation في البرامج النصية الخاصة بك ، تأكد من استخدام وكيل مستخدم 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 . |
| captcha_solver | لا أحد | طريقة حل Captcha. يتم استخدامه عند مواجهة Captcha. انظر قسم Captcha Solvers. |
| TZ | التوقيت العالمي | المنطقة الزمنية المستخدمة في السجلات ومتصفح الويب. مثال: 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_port | 8192 | ميناء الاستماع لمصدر بروميثيوس. انظر قسم بروميثيوس أدناه. |
يتم تعيين متغيرات البيئة بشكل مختلف اعتمادًا على نظام التشغيل. بعض الأمثلة:
docker-compose.yml أو في أمر Docker CLI.export 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 Solvers. يمكنك التحقق من الحالة في القضايا المفتوحة. أي مساعدة موضع ترحيب.
في بعض الأحيان ، لا يعطي CloudFlare الحسابات الرياضية واختبارات المتصفح فحسب ، بل في بعض الأحيان يتطلبون أيضًا من المستخدم حل Captcha. إذا كان هذا هو الحال ، فسيقوم Flaresolverr بإرجاع الخطأ Captcha detected but no automatic solver is configured.
يمكن تخصيص Flaresolverr لحل Captcha تلقائيًا عن طريق تعيين البيئة المتغير CAPTCHA_SOLVER إلى اسم ملف أحد المحولات داخل دليل /captcha.