حين يرفض موقع مستهدف توكن reCAPTCHA أو يعلق الاستطلاع الدوري دون نتيجة، يكون السؤال الأول: ما الذي أرسله كودي فعلاً، وما الذي عاد إليه؟ يجيب Charles Proxy عن ذلك بوضعه بين تطبيقك وخوادم CaptchaAI، فيعرض كل طلب واستجابة ووقت تنفيذ بصورته الخام. في هذا الدليل تضبط Charles لاعتراض حركة CaptchaAI، ثم تقرأ استدعاءات in.php وres.php لتحدّد سبب الخطأ في دقائق بدل التخمين.
الإعداد والتهيئة
1. تثبيت Charles Proxy
نزّل الأداة من charlesproxy.com، وهي متوفرة على Windows وmacOS وLinux.
2. توجيه كودك عبر Charles
يعمل Charles على localhost:8888 افتراضياً، فوجّه مكتبة الطلبات إلى هذا المنفذ:
Python:
import requests
proxies = {
"http": "http://localhost:8888",
"https": "http://localhost:8888",
}
# Disable SSL verification for Charles (development only)
resp = requests.post(
"https://ocr.captchaai.com/in.php",
data={"key": "YOUR_API_KEY", "method": "userrecaptcha", "json": "1"},
proxies=proxies,
verify=False,
)
Node.js:
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://localhost:8888');
const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: { key: 'YOUR_API_KEY', method: 'userrecaptcha', json: 1 },
httpsAgent: agent,
});
3. تفعيل فحص SSL
لفحص حركة HTTPS المشفّرة لدى CaptchaAI اتبع الآتي:
- Proxy → SSL Proxying Settings → Add
- المضيف:
ocr.captchaai.com، المنفذ:443 - Help → SSL Proxying → Install Charles Root Certificate
- امنح الشهادة الثقة داخل مخزن شهادات نظام التشغيل لديك
تشخيص الأخطاء الشائعة
الخطأ: ERROR_WRONG_GOOGLEKEY
في Charles، افتح جسم طلب الإرسال وابحث عن حقل googlekey:
# What Charles shows:
key=YOUR_API_KEY&method=userrecaptcha&googlekey=&pageurl=https://example.com&json=1
^^^^^^^^ empty!
الإصلاح: فشل استخراج مفتاح الموقع في مرحلة سابقة، فراجع منطق الاستخراج لديك.
مثال من الواقع: يؤتمت مهندس QA في متجر إلكتروني خليجي اختبار نموذج تسجيل محمي بـ reCAPTCHA v2، فتنجح الطلبات محلياً وتفشل على خادم الاختبار. بفتح Charles على الخادم يتّضح أن حقل
googlekeyيصل فارغاً — فالخلل ليس في CaptchaAI بل في سكربت الاستخراج الذي يقرأ المفتاح قبل اكتمال تحميل الصفحة في متصفح بلا واجهة.
الخطأ: انتهاء المهلة دون حل
استعن بعرض Sequence في Charles لقراءة التوقيت:
POST /in.php → 234ms ✓
GET /res.php → 189ms (CAPCHA_NOT_READY)
GET /res.php → 201ms (CAPCHA_NOT_READY)
GET /res.php → 195ms (CAPCHA_NOT_READY)
... 23 more ...
GET /res.php → 188ms (CAPCHA_NOT_READY) ← never resolves
إذا ظل الطلب دون حل مهما طال الاستطلاع، فتحقق من صحة مفتاح الموقع وعنوان URL المرسلين.
الخطأ: رفض الموقع المستهدف للتوكن
قارن ما أعاده CaptchaAI بما تحقنه فعلاً في الموقع:
- في Charles، ابحث عن استجابة
/res.phpالتي تحملstatus: 1 - انسخ التوكن الكامل من حقل
request - حدّد الطلب اللاحق الموجَّه إلى الموقع المستهدف
- تأكّد من وجود التوكن في جسم النموذج تحت الاسم
g-recaptcha-response
مرجع سريع: ماذا تفحص في كل استدعاء
طلب الإرسال: POST /in.php
اضغط في Charles على الطلب الموجَّه إلى /in.php، وراجع علامات التبويب الأربع:
| علامة التبويب | ما الذي تتحقق منه |
|---|---|
| Request → Headers | صحّة قيمة Content-Type |
| Request → Body | وجود كل المعاملات المطلوبة |
| Response → Body | ظهور {"status":1,"request":"TASK_ID"} عند النجاح |
| Timing | مدة الطلب (يُفترض أن تقل عن ثانية واحدة) |
وأكثر مشكلات الإرسال تكراراً تظهر هكذا:
| ما يظهره Charles | الدلالة |
|---|---|
معامل method مفقود |
ERROR_BAD_PARAMETERS |
| قيمة Content-Type خاطئة | لا تُحلَّل المعاملات |
حقل googlekey فارغ |
ERROR_WRONG_GOOGLEKEY |
| جسم JSON مُشوَّه | استخدم بيانات النموذج (form data) لا جسم JSON |
طلب الاستطلاع: GET /res.php
وفي طلبات الاستطلاع الدوري تفحص ثلاثة عناصر:
| العنصر | القيمة المتوقعة |
|---|---|
| المعاملات | key، action=get، id=TASK_ID |
| الاستجابة | CAPCHA_NOT_READY (تابع الاستطلاع) أو {"status":1,"request":"TOKEN"} |
| التوقيت | يلي كل استطلاع فترة انتظار (sleep) تحدّدها أنت |
أدوات Charles التي تسرّع التصحيح
الاستبدال المحلي (Map Local)
استبدل استجابات الخدمة بملفات محلية أثناء الاختبار:
- Tools → Map Local → Add
- وجّه
https://ocr.captchaai.com/res.phpإلى ملف JSON محلي - أنشئ الملف
mock_response.json:
{"status": 1, "request": "mock_token_for_testing"}
بهذا تختبر منطق الحقن دون إرسال طلبات فعلية أو إشغال Thread بحل حقيقي.
محاكاة الشبكات البطيئة (Throttle)
لاختبار سلوك كودك على اتصال ضعيف، فعّل Throttle من Proxy → Throttle Settings، واضبط الإعداد المسبق على سرعة 3G أو مستوى EDGE، وتحقق من تعامله مع الاستجابات البطيئة والمهل.
نقاط التوقف (Breakpoints)
عيّن نقطة توقف على /in.php لفحص الطلب وتعديله قبل إرساله:
- Proxy → Breakpoint Settings → Add
- المضيف:
ocr.captchaai.com، المسار:/in.php - فعّل خيار Request
- سيتوقف كودك قبل الإرسال لتعدّل المعاملات يدوياً
إعادة إرسال الطلب (Repeat)
انقر بالزر الأيمن على أي طلب واختر Repeat لإعادة إرساله، وهو مفيد لاختبار الاستطلاع دون إعادة تشغيل السكربت كاملاً.
حلول لمشكلات الإعداد الشائعة
| المشكلة | السبب | الحل |
|---|---|---|
| أخطاء SSL في الكود | شهادة Charles غير موثوقة | ثبّت شهادة جذر Charles واستخدم verify=False أثناء التطوير |
| لا تظهر أي طلبات | الكود لا يمر عبر الوكيل | اضبط الوكيل في إعداد requests/axios |
| استجابة HTTPS مشوّشة | فحص SSL غير مُفعّل | أضف ocr.captchaai.com إلى إعدادات SSL Proxying |
| Charles يبطئ الطلبات | نقاط التوقف مفعّلة | عطّل نقاط التوقف عند عدم الحاجة إليها |
بدائل Charles Proxy
| الأداة | المنصة | HTTPS | التكلفة |
|---|---|---|---|
| Charles Proxy | Win/Mac/Linux | يتطلب تثبيت شهادة | مدفوعة (تجربة مجانية) |
| mitmproxy | Win/Mac/Linux | يتطلب تثبيت شهادة | مجانية |
| Fiddler | Windows | فك تشفير HTTPS مدمج | مجانية |
| Proxyman | macOS | إعداد HTTPS بنقرة واحدة | فريميوم |
إعداد mitmproxy السريع
# Install
pip install mitmproxy
# Run
mitmproxy --listen-port 8080
# Configure Python
proxies = {"https": "http://localhost:8080"}
الأسئلة الشائعة
كيف أعترض حركة HTTPS المشفّرة الخاصة بـ CaptchaAI؟
أضف ocr.captchaai.com:443 إلى إعدادات SSL Proxying وثبّت شهادة الجذر في نظامك، فتظهر أجسام الطلبات والاستجابات بنص واضح.
ما الفرق بين Charles وmitmproxy لهذه المهمة؟
كلاهما يعترض HTTPS بعد تثبيت شهادة. يتميّز Charles بواجهة رسومية غنية (نقاط التوقف وMap Local ومحاكاة السرعة) وهو مدفوع بتجربة مجانية، بينما mitmproxy مجاني ويعمل من الطرفية.
كيف أختبر كود حقن التوكن دون إرسال طلبات فعلية؟
استخدم ميزة Map Local لتوجيه res.php إلى ملف JSON محلي يحمل توكناً وهمياً، فتتحقق من منطق الحقن دون انتظار حل حقيقي.
هل يؤثر توجيه الطلبات عبر Charles في عملية الحل؟
لا. تمرّ طلباتك إلى CaptchaAI بشفافية وتتعامل الخدمة معها كأي طلب مباشر، فوجود Charles في المسار لا يغيّر نتيجة الحل.
صحّح تكاملك مع CaptchaAI وحسّنه
أنشئ مفتاح الـ API من captchaai.com وابدأ بمراقبة استدعاءاتك الحقيقية.