عند حلّ كابتشا مرتبط بعنوان IP لا يكفي أن يعيد CaptchaAI رمزاً صحيحاً؛ يجب أن يُولَّد هذا الرمز من نفس عنوان IP الذي حمّل الصفحة. والحل بسيط: مرّر بروكسيك الخاص إلى واجهة CaptchaAI عبر معاملتين فقط هما proxy وproxytype، فيتولّى الخادم الحل عبر بروكسيك ويصبح الرمز مطابقاً لعنوان IP المتوقَّع. في هذا الدليل نغطّي طرق المصادقة الأربع المدعومة — بيانات الاعتماد، SOCKS5، القائمة البيضاء لعناوين IP، وبروكسي HTTPS — مع أمثلة جاهزة بلغتَي Python وNode.js.
كيف يعمل تمرير البروكسي داخل CaptchaAI
عندما تضيف proxy وproxytype إلى طلب in.php، يوجّه CaptchaAI عملية الحل عبر بروكسيك بدلاً من خوادمه المباشرة. النتيجة أن الرمز الناتج يحمل بصمة عنوان IP الخاص ببروكسيك، وهو ما تتطلبه أنظمة الحماية التي تربط الرمز بالجهة التي أصدرته.
أنظمة مثل Cloudflare Turnstile وCloudflare Challenge تتحقق من أن الرمز صادر عن نفس عنوان IP الذي طلب الصفحة. فإذا حُلّ الكابتشا من عنوان مختلف، يرفض الموقع الهدف الرمز حتى لو كان صالحاً تقنياً. عند تمرير البروكسي تكسب ثلاث ضمانات:
- تطابق عنوان IP بين تحميل الصفحة وإصدار الرمز.
- قبول أعلى للرمز أمام تحديات Cloudflare المرتبطة بعنوان IP.
- تشخيص أوضح لحالات الرفض التي يصعب تتبّعها بدون بروكسي.
متى تحتاج فعلاً إلى تمرير بروكسي
ليست كل عملية حل بحاجة إلى بروكسي. القاعدة العملية: مرّر بروكسي فقط حين يكون الرمز مقيّداً بعنوان IP، وإلا فأنت تضيف زمن استجابة بلا فائدة. يلخّص الجدول التالي الحالات الشائعة:
| السيناريو | هل تمرّر بروكسي؟ | السبب |
|---|---|---|
| reCAPTCHA v2 القياسي | غير ضروري غالباً | الرمز يعمل من أي عنوان IP |
| reCAPTCHA v3 | اختياري | قد تعتمد الدرجة على عنوان IP |
| Cloudflare Turnstile | موصى به | الرمز مرتبط بعنوان IP |
| Cloudflare Challenge | مطلوب | التحدي مرتبط بعنوان IP |
| الجلسات المرتبطة بعنوان IP | مطلوب | يُتحقَّق من الرمز مقابل عنوان IP الأصلي |
طرق المصادقة الأربع
يقبل CaptchaAI أربع صيغ لمصادقة البروكسي. الفرق بينها في طريقة إثبات الهوية للبروكسي وفي البروتوكول المستخدم، أما منطق الإرسال والاستطلاع الدوري للنتيجة فيبقى واحداً:
- بيانات الاعتماد عبر HTTP
- بيانات الاعتماد عبر SOCKS5
- القائمة البيضاء لعناوين IP بدون بيانات اعتماد
- بروكسي HTTPS عبر نفق CONNECT
1. اسم المستخدم وكلمة المرور عبر HTTP
الطريقة الأكثر شيوعاً: تمرّر المضيف والمنفذ واسم المستخدم وكلمة المرور في سلسلة واحدة، وتضبط proxytype على HTTP.
import requests
import time
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
def solve_with_http_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
"""Pass HTTP proxy to CaptchaAI for IP-matched solving."""
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTP",
"json": 1,
})
data = resp.json()
if data["status"] != 1:
raise Exception(f"Submit: {data['request']}")
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = resp.json()
if data["request"] == "CAPCHA_NOT_READY":
continue
if data["status"] == 1:
return data["request"]
raise Exception(f"Solve: {data['request']}")
raise TimeoutError("Timeout")
# Usage
token = solve_with_http_proxy(
site_url="https://example.com/form",
sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
proxy_host="proxy.example.com",
proxy_port=8080,
proxy_user="myuser",
proxy_pass="mypass",
)
2. اسم المستخدم وكلمة المرور عبر SOCKS5
نفس البنية تماماً، لكن مع proxytype مضبوطاً على SOCKS5. اختر هذا البروتوكول إذا كان مزوّدك يعمل عليه أو إذا احتجت إلى نفق أكثر مرونة على مستوى الاتصال.
def solve_with_socks5_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
"""Pass SOCKS5 proxy to CaptchaAI."""
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "SOCKS5",
"json": 1,
})
data = resp.json()
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
3. القائمة البيضاء لعناوين IP (بدون بيانات اعتماد)
يعتمد بعض مزوّدي البروكسي على القائمة البيضاء لعناوين IP بدلاً من اسم المستخدم وكلمة المرور. في هذه الحالة تمرّر المضيف والمنفذ فقط:
def solve_with_whitelisted_proxy(site_url, sitekey, proxy_host, proxy_port):
"""Proxy with IP whitelist — no username/password."""
proxy_param = f"{proxy_host}:{proxy_port}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTP",
"json": 1,
})
data = resp.json()
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
مهم: مع بروكسيات القائمة البيضاء عليك أيضاً إضافة عناوين IP الخاصة بخوادم CaptchaAI إلى قائمتك البيضاء، لأن خوادم CaptchaAI هي التي ستتصل ببروكسيك.
4. بروكسي HTTPS عبر CONNECT
للبروكسي الذي يعمل بنفق مشفَّر، اضبط proxytype على HTTPS. أما منطق الإرسال والاستطلاع فهو نفسه المستخدم في الطرق السابقة:
def solve_with_https_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTPS",
"json": 1,
})
# ... same polling logic ...
التكامل عبر Node.js
إن كان مسار الأتمتة لديك مبنياً على Node.js، فالمبدأ ذاته ينطبق: مرّر كائن إعداد البروكسي وحدّد نوعه، ثم استطلع النتيجة حتى تجهز.
const axios = require("axios");
const CAPTCHAAI_KEY = "YOUR_API_KEY";
const API = "https://ocr.captchaai.com";
async function solveWithProxy(siteUrl, sitekey, proxyConfig) {
const params = {
key: CAPTCHAAI_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: siteUrl,
proxy: `${proxyConfig.host}:${proxyConfig.port}:${proxyConfig.user}:${proxyConfig.pass}`,
proxytype: proxyConfig.type || "HTTP",
json: 1,
};
const submit = await axios.post(`${API}/in.php`, null, { params });
const taskId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get(`${API}/res.php`, {
params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
});
if (result.data.request === "CAPCHA_NOT_READY") continue;
if (result.data.status === 1) return result.data.request;
}
throw new Error("Timeout");
}
// Usage
const token = await solveWithProxy(
"https://example.com/form",
"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
{
host: "proxy.example.com",
port: 8080,
user: "myuser",
pass: "mypass",
type: "HTTP", // HTTP, HTTPS, SOCKS4, or SOCKS5
}
);
مرجع صيغة معامل proxy
أياً كان البروتوكول، تبقى الصيغة موحّدة: host:port:user:pass مع بيانات الاعتماد، أو host:port فقط مع القائمة البيضاء. الجدول التالي يجمع القيم المقبولة لـ proxytype:
| proxytype | صيغة البروكسي | مثال |
|---|---|---|
HTTP |
host:port:user:pass |
proxy.com:8080:user:pass |
HTTPS |
host:port:user:pass |
proxy.com:8443:user:pass |
SOCKS4 |
host:port:user:pass |
proxy.com:1080:user:pass |
SOCKS5 |
host:port:user:pass |
proxy.com:1080:user:pass |
| القائمة البيضاء لعناوين IP | host:port |
proxy.com:8080 |
صيغ مزوّدي البروكسي الشائعة
يختلف تنسيق اسم المستخدم قليلاً بين المزوّدين، خاصة عند تحديد المنطقة أو نوع الشبكة السكنية. هذه أمثلة جاهزة لأشهر ثلاثة مزوّدين:
# Bright Data
proxy = "brd.superproxy.io:22225:brd-customer-ID-zone-residential:PASSWORD"
proxytype = "HTTP"
# Smartproxy
proxy = "gate.smartproxy.com:10001:spuser:sppassword"
proxytype = "HTTP"
# Oxylabs
proxy = "pr.oxylabs.io:7777:customer-USERNAME:PASSWORD"
proxytype = "HTTP"
سيناريو عملي: اختبار متجر خلف Cloudflare
تخيّل فريق ضمان جودة لمتجر إلكتروني في القاهرة أو الرياض يريد أتمتة اختبار إتمام الشراء على صفحة محمية بـ Cloudflare Turnstile. لو حُلّ الكابتشا من خوادم CaptchaAI مباشرة، سيصل الرمز من عنوان IP في مركز بيانات أجنبي، فيتعامل معه Cloudflare كجلسة مشبوهة ويرفضه.
الحل هو تمرير بروكسي سكني من نفس دولة المستخدمين المستهدفين مع تفعيل جلسة لزجة. بذلك يتطابق العنوانان، فيمرّ الاختبار كأن مستخدماً حقيقياً من المنطقة نفسها أكمل العملية. والفكرة عينها تنطبق على تدفقات تسجيل الدخول وحجوزات المواعيد المرتبطة بموقع جغرافي محدد.
معالجة الأخطاء الشائعة
أغلب مشكلات البروكسي تعود إلى بيانات اعتماد خاطئة أو تعذّر وصول خوادم CaptchaAI إلى بروكسيك. استخدم رمز الخطأ العائد لتحديد السبب بسرعة:
| المشكلة | السبب | الإجراء |
|---|---|---|
ERROR_PROXY_NOT_AUTHORIZED |
بيانات اعتماد خاطئة أو عنوان IP غير مُدرج في القائمة البيضاء | تحقّق من بيانات اعتماد البروكسي؛ أضِف عناوين IP الخاصة بـ CaptchaAI إلى القائمة البيضاء |
ERROR_PROXY_CONNECTION_FAILED |
تعذّر وصول CaptchaAI إلى البروكسي | تأكّد من إمكانية الوصول إلى البروكسي من عناوين IP خارجية |
| رفض الرمز من الموقع الهدف | عنوان IP للبروكسي لا يطابق عنوان IP الذي حمّل الصفحة | استخدم نفس الجلسة اللزجة للطرفين |
| بطء الحل مع البروكسي | يضيف البروكسي زمن استجابة | اقبل التأخير أو استخدم بروكسي أسرع |
ERROR_BAD_PARAMETERS |
صيغة البروكسي غير صحيحة | التزم بصيغة host:port:user:pass |
أفضل ممارسات الجلسات اللزجة
البروكسيات الدوّارة عدوّ الرموز المرتبطة بعنوان IP. إذا مرّرت بروكسي يبدّل عنوانه في كل طلب، فقد يحلّ CaptchaAI الكابتشا من عنوان مختلف عن الذي حمّل الصفحة، فينهار التطابق ويُرفض الرمز.
للحفاظ على ثبات العنوان وتجنّب الرفض، التزم بالممارسات التالية:
- فعّل الجلسة اللزجة عند مزوّدك كي يبقى عنوان IP نفسه طوال دورة الحل.
- اختر بروكسي قريباً جغرافياً من موقع المستخدم المتوقَّع لتقليل رفض السمعة.
- احسب زمن الاستجابة الإضافي البالغ بضع ثوانٍ الذي يضيفه توجيه الطلب عبر البروكسي.
- جهّز منطق إعادة المحاولة ببروكسي احتياطي حتى لا تتوقف الأتمتة عند أول فشل اتصال.
الأسئلة الشائعة
ما الفرق بين HTTP وSOCKS5 عند تمرير البروكسي؟
كلاهما ينقل الطلب عبر بروكسيك، والفرق في مستوى العمل:
- HTTP: يعمل على مستوى طلبات الويب، وهو الأكثر شيوعاً.
- SOCKS5: يعمل على مستوى الاتصال ويدعم أنواع حركة أوسع.
اختر ما يوفّره مزوّدك؛ فإن توفّر الاثنان فلا فرق عملي يُذكر في النتيجة.
هل يجب أن يكون البروكسي من نفس دولة المستخدم المستهدف؟
يُفضَّل ذلك مع التحديات المرتبطة بالسمعة الجغرافية مثل Cloudflare. تطابق البلد يقلّل احتمال رفض الرمز، خصوصاً في تدفقات تسجيل الدخول والحجوزات الحساسة للموقع.
كيف أتعامل مع الجلسات اللزجة مع CaptchaAI؟
خطوتان أساسيتان لا غنى عنهما:
- فعّل الجلسة اللزجة عند مزوّدك كي يبقى عنوان IP ثابتاً بين تحميل الصفحة ولحظة الحل.
- تجنّب البروكسيات الدوّارة في الطلب نفسه لأنها تكسر تطابق عنوان IP.
هل يبطئ تمرير البروكسي عملية الحل؟
قليلاً، لأن CaptchaAI يوجّه الحل عبر بروكسيك. توقّع زيادة تتراوح بين ثانيتين وخمس ثوانٍ فوق زمن الحل المعتاد، وهو تأخير مقبول مقابل ضمان تطابق عنوان IP.
ماذا يعني الخطأ ERROR_PROXY_NOT_AUTHORIZED؟
يعني أن CaptchaAI وصل إلى بروكسيك لكن رُفضت المصادقة لأحد سببين:
- بيانات اعتماد خاطئة في الحقلين
userوpass. - عنوان IP غير مُدرج في القائمة البيضاء لدى مزوّدك.
راجع الحقلين وتأكّد من إدراج عناوين IP الخاصة بـ CaptchaAI.
أدلة ذات صلة
مرّر بروكسيك إلى CaptchaAI لحلّ الكابتشا من عنوان IP مطابق — احصل على مفتاح API الخاص بك.