يعمل Fiddler كخادم وسيط محلي يلتقط كل طلب واستجابة يمرّان بين الكود الخاص بك وواجهة CaptchaAI API، فتقرأ الحمولة الصافية والعناوين ورمز الحالة والتوقيت الدقيق كما تصل إلى الخادم تماماً. حين يتوقف حل الكابتشا دون سبب واضح في السجلات، يكفي تفعيل فك تشفير HTTPS وتوجيه طلباتك عبر البروكسي لترى أين ينكسر المسار: قبل الإرسال، أثناء الاستطلاع، أو عند حقن الرمز في الموقع المستهدف.
لماذا يكشف Fiddler ما تخفيه السجلات
حين تكون رسائل الخطأ مقتضبة أو غامضة، يمنحك اعتراض الحركة الفعلية الصورة الكاملة التي لا يظهرها سجلّ التطبيق:
| السيناريو | ما يظهره Fiddler |
|---|---|
| تُرجع واجهة API أخطاءً لكن سجلاتك مقتضبة | نص الطلب الكامل والعناوين والاستجابة |
| تبدو طلبات الحل معلّقة بلا نتيجة | هل وصل الطلب إلى الخادم أم انتهت مهلته |
| يبدو الرمز غير صالح عند حقنه | المحتوى الفعلي للرمز وأي مشكلات في الترميز |
| أعطال مرتبطة بالخادم الوسيط | هل تُوجَّه الطلبات عبر البروكسي المتوقع |
| مشكلات تحديد معدل الطلبات | توقيت الطلبات وأنماط استجابة 429 |
تهيئة Fiddler لاعتراض حركة HTTPS
يعترض Fiddler حركة HTTPS بصفته خادماً وسيطاً محلياً؛ لرؤية حمولات CaptchaAI API فعّل فك التشفير أولاً ثم وجّه الكود إلى البروكسي.
الخطوة 1: فعّل فك تشفير HTTPS وثبّت الشهادة
Fiddler Everywhere:
- افتح الإعدادات ثم HTTPS
- فعّل خيار "Capture HTTPS traffic"
- ثبّت شهادة الجذر الخاصة بـ Fiddler عند طلبها
- امنح الشهادة الثقة في مخزن شهادات نظام التشغيل لديك
Fiddler Classic (على Windows):
- Tools ثم Options ثم HTTPS
- فعّل "Decrypt HTTPS traffic"
- انقر "Actions" ثم "Trust Root Certificate"
الخطوة 2: وجّه الكود عبر بروكسي Fiddler
يستمع Fiddler على 127.0.0.1:8866 في Fiddler Everywhere، وعلى 127.0.0.1:8888 في Fiddler Classic. اضبط طلباتك على البروكسي المناسب:
Python (مكتبة requests):
import requests
proxies = {
"http": "http://127.0.0.1:8866",
"https": "http://127.0.0.1:8866",
}
# Submit CAPTCHA task through Fiddler
response = requests.post(
"https://ocr.captchaai.com/in.php",
data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "SITE_KEY",
"pageurl": "https://example.com",
"json": 1,
},
proxies=proxies,
verify=False, # Required for Fiddler's self-signed cert
)
print(response.json())
JavaScript (Node.js مع Axios):
const axios = require("axios");
const HttpsProxyAgent = require("https-proxy-agent");
const agent = new HttpsProxyAgent("http://127.0.0.1:8866");
async function submitTask() {
const response = await axios.post(
"https://ocr.captchaai.com/in.php",
new URLSearchParams({
key: "YOUR_API_KEY",
method: "userrecaptcha",
googlekey: "SITE_KEY",
pageurl: "https://example.com",
json: 1,
}),
{
httpsAgent: agent,
proxy: false, // Disable axios default proxy handling
}
);
console.log(response.data);
}
submitTask();
ملاحظة: يعطّل
verify=Falseفي Python التحقق من شهادة الاعتراض التي يستخدمها Fiddler. استخدمه أثناء التشخيص فقط، واحذفه في بيئة الإنتاج.
قراءة الطلب والاستجابة
إرسال المهمة (in.php)
عند التقاط إرسال مهمة، افحص هذه الحقول في Fiddler:
| اللوحة | ما يجب التحقق منه |
|---|---|
| العناوين | يجب أن يكون Content-Type بقيمة application/x-www-form-urlencoded |
| نص الطلب | تأكد من صحة key وmethod وgooglekey/sitekey وpageurl |
| نص الاستجابة | يجب أن يعيد {"status":1,"request":"TASK_ID"} عند النجاح |
| رمز الحالة | 200 موافق، 403 مشكلة في المفتاح، 429 تجاوز حدّ المعدل |
استطلاع النتيجة (res.php)
أثناء الاستطلاع الدوري للنتيجة:
| اللوحة | ما يجب التحقق منه |
|---|---|
| نص الطلب | key وaction=get وid=TASK_ID وjson=1 |
| نص الاستجابة | CAPCHA_NOT_READY أثناء المعالجة، و{"status":1,"request":"TOKEN"} عند النجاح |
| التوقيت | افحص الفواصل بين الاستطلاعات — يجب ألا تقل عن 5 ثوانٍ |
أخطاء شائعة تظهر في Fiddler
| ما تراه | الدلالة |
|---|---|
نص الطلب يحمل googlekey فارغاً |
فشل استخراج مفتاح الموقع في مرحلة سابقة |
{"status":0,"request":"ERROR_WRONG_USER_KEY"} |
مفتاح الـ API غير صالح |
{"status":0,"request":"ERROR_ZERO_BALANCE"} |
لا يوجد رصيد في الحساب |
{"status":0,"request":"ERROR_NO_SLOT_AVAILABLE"} |
الخادم مشغول — أعد المحاولة |
| لا توجد استجابة (مهلة) | الشبكة أو البروكسي يحجب الاتصال |
| رمز الحالة 429 | طلبات كثيرة جداً — خفّف وتيرة الاستطلاع |
عزل طلبات CaptchaAI بالمرشحات
بعدما تعرف ما تبحث عنه، وفي جلسة مزدحمة، أضف مرشحاً يعرض طلبات CaptchaAI وحدها:
مرشحات Fiddler Everywhere
- افتح تبويب Filters
- أضف قاعدة: Host ثم
containsثمocr.captchaai.com - طبّق المرشح
مرشحات Fiddler Classic
- افتح تبويب Filters
- فعّل "Use Filters"
- من قسم "Hosts" اختر "Show only the following Hosts"
- أدخل
ocr.captchaai.com
بعد ذلك تظهر طلبات CaptchaAI API فقط في قائمة الجلسات.
سيناريو عملي: تشخيص عطل خلف بروكسي سكني
لنفترض أنك تدير سكربت أتمتة من خادم في الرياض يعتمد على وكيل سكني لجمع بيانات عامة. يعمل المثال محلياً لكنه يفشل في الإنتاج برسالة أن الرمز غير صالح. بدل التخمين، وجّه طلبات الإنتاج عبر Fiddler لجلسة واحدة: عند فحص إرسال المهمة تجد حقل googlekey يصل فارغاً، أي أن استخراج مفتاح الموقع فشل قبل وصول الطلب إلى CaptchaAI، فالعطل في مرحلة جمع الصفحة لا في الخدمة نفسها.
وفي حالة مختلفة قد تكتشف أن الطلب لا يمرّ عبر الوكيل المتوقع أصلاً، فتظهر سمعة عنوان IP الخاطئة سبباً وراء الرفض. هذا التمييز المبكر بين عطل المنبع وعطل الخدمة يوفّر ساعات من التخمين.
تحليل زمن الاستجابة
يعرض عرض Timeline مدة كل مرحلة من الطلب، فتحدد أين يضيع الوقت بالضبط:
| المرحلة | القيمة السليمة | مؤشر المشكلة |
|---|---|---|
| بحث DNS | < 50 مللي ثانية | > 500 مللي ثانية = مشكلة DNS |
| اتصال TCP | < 100 مللي ثانية | > 1000 مللي ثانية = مشكلة شبكة |
| مصافحة TLS | < 200 مللي ثانية | > 1000 مللي ثانية = مشكلة شهادة |
| استجابة الخادم (in.php) | < 500 مللي ثانية | > 2000 مللي ثانية = ازدحام الخادم |
| استجابة الخادم (res.php) | < 200 مللي ثانية | > 1000 مللي ثانية = غير معتاد — تحقق من الحالة |
بناء طلبات اختبار من Composer
استخدم أداة Composer داخل Fiddler لبناء طلبات CaptchaAI من الصفر دون كتابة كود:
إرسال المهمة:
POST https://ocr.captchaai.com/in.php
Content-Type: application/x-www-form-urlencoded
key=YOUR_API_KEY&method=userrecaptcha&googlekey=SITE_KEY&pageurl=https://example.com&json=1
استطلاع النتيجة:
GET https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=TASK_ID&json=1
وهي أسرع من كتابة كود كامل حين تريد فقط التأكد من أن الـ API يستجيب.
تعديل الطلبات عبر نقاط التوقف
توقف نقاط التوقف الطلب قبل إرساله، فتعدّل معلماته وتختبر القيم مباشرة دون لمس الكود:
ضبط نقطة توقف
Fiddler Everywhere:
- Rules ثم Add Rule
- المطابقة: أن يحتوي عنوان URL على
ocr.captchaai.com/in.php - الإجراء: "Pause before sending"
Fiddler Classic:
- Rules ثم Automatic Breakpoints ثم Before Requests
- أو اكتب
bpu ocr.captchaai.comفي شريط QuickExec
ماذا تفعل عند التوقف
عند توقّف الطلب:
- افحص نص الطلب — تأكد من صحة كل المعلمات
- عدّل المعلمات — غيّر
methodأوgooglekeyأوpageurlلتجربة قيم مختلفة - استأنف — انقر "Run to Completion" لإرسال الطلب المعدّل
- تحقق من الاستجابة — لتعرف إن أصلح تغييرك المشكلة
تفيد هذه الطريقة في معرفة ما إذا كانت قيمة معلمة بعينها سبب الفشل، دون تعديل الكود.
إعادة إرسال الطلبات الفاشلة
عند فشل طلب، أعِد إرساله من Fiddler مباشرة:
- انقر بزر الفأرة الأيمن على الجلسة الفاشلة
- اختر Replay ثم Reissue Requests
- يُرسَل الطلب نفسه برؤوس ونص متطابقين
وللإعادة مع التعديل:
- انقر بالزر الأيمن ثم Edit in Composer
- عدّل المعلمات
- انقر Execute
هكذا تختبر الإصلاحات دون إعادة تشغيل تطبيقك.
تصدير الجلسات لدعم CaptchaAI
إذا احتجت مشاركة بيانات التشخيص مع فريق دعم CaptchaAI:
- حدّد الجلسات المعنية في Fiddler
- File ثم Export Sessions ثم Selected Sessions
- اختر تنسيق HTTPArchive (.har)
- احذف مفتاح الـ API الخاص بك من الملف المُصدَّر قبل مشاركته
Find and replace your actual API key with "REDACTED" in the .har file
معالجة المشكلات الشائعة
| المشكلة | السبب | الحل |
|---|---|---|
| Fiddler لا يعرض أي حركة | الكود لا يمرّ عبر بروكسي Fiddler | اضبط البروكسي على 127.0.0.1:8866 (Everywhere) أو 8888 (Classic) |
| أخطاء في شهادة SSL | شهادة جذر Fiddler غير موثوقة | أعد تثبيت شهادة Fiddler وأضفها إلى الجذور الموثوقة |
| نص الاستجابة يظهر مشوّهاً | الاستجابة مضغوطة | فعّل زر "Decode" في الشريط، أو Rules ثم Remove All Encodings |
| نقاط التوقف لا تعمل | عدم تطابق المرشح أو القاعدة | تأكد من أن نمط URL يطابق ocr.captchaai.com تماماً |
| تظهر الحركة لكن النص فارغ | عدم تطابق Content-Length أو استجابة متدفقة | انقر الجلسة وانتظر اكتمال تحميل الاستجابة |
أسئلة شائعة
هل يبطئ Fiddler حل الكابتشا فعلياً؟
لا يُذكر. يضيف Fiddler نحو 1–5 مللي ثانية لكل طلب بسبب مروره عبر البروكسي، وهو فارق لا يُقارن بزمن حل الكابتشا الممتد عادة من 10 إلى 60 ثانية. انتبه فقط إلى أن الطوابع الزمنية في Fiddler تعكس لحظة استقباله البيانات، لا لحظة إرسال الكود لها.
هل يصلح Fiddler بديلاً عن أدوات مثل Charles أو mitmproxy؟
نعم في أغلب حالات تشخيص CaptchaAI API. الأدوات الثلاث تعترض حركة HTTPS وتعرض الحمولة، لكن Fiddler يتميّز بأدوات Composer ونقاط التوقف وإعادة الإرسال ضمن واجهة رسومية مريحة على Windows. وعلى macOS أو Linux يبقى Fiddler Everywhere أو mitmproxy خياراً عملياً.
لماذا يظهر نص الاستجابة مضغوطاً أو غير مقروء؟
لأن الخادم يعيد استجابة مضغوطة (gzip مثلاً). فعّل فك الترميز من زر Decode في شريط الأدوات، أو من Rules ثم Remove All Encodings، لتقرأ حقل request وبقية الحقول بوضوح.
كيف أتجنّب تسريب مفتاح الـ API عند مشاركة الجلسات؟
يظهر مفتاحك داخل نص الطلب في كل جلسة، لذا لا تشارك ملف .har أو لقطات Fiddler قبل استبدال المفتاح الفعلي بقيمة مثل REDACTED. ومن الأفضل تدوير المفاتيح دورياً حتى يبقى أي مفتاح مكشوف قصير العمر.
الخطوات التالية
- ابدأ سريعاً: حلّ أول كابتشا عبر CaptchaAI في 5 دقائق
- حلّ reCAPTCHA v2 عبر الـ API خطوة بخطوة
- حلّ Cloudflare Turnstile عبر الـ API
- حلّ GeeTest v3 عبر الـ API