استكشاف الأخطاء

ERROR_PROXY_NOT_AUTHORIZED: إصلاحات مصادقة الوكيل

في معظم الحالات يعود خطأ ERROR_PROXY_NOT_AUTHORIZED إلى سبب واحد: بيانات اعتماد الوكيل التي أرسلتها إلى CaptchaAI لا تسمح بالمرور — إمّا لأن التنسيق غير مطابق، أو لأن الوكيل يعتمد على إدراج عنوان IP في القائمة البيضاء بدلاً من اسم المستخدم وكلمة المرور. باختصار، لم يتمكن خادم الحل من الاتصال عبر الوكيل الذي حددته لتحميل الصفحة المستهدفة. في الأسطر التالية نمرّ على الأسباب الستة الأكثر تكراراً، ونرفق سكربتات Python جاهزة تفحص الوكيل وتصلحه قبل أن تدفع الطلب إلى الـ API.

لماذا يظهر خطأ ERROR_PROXY_NOT_AUTHORIZED؟

ابدأ التشخيص من الأسباب الشائعة التالية، مرتّبة من الأكثر احتمالاً إلى الأقل، مع طريقة تحقق سريعة لكلٍّ منها:

  • تنسيق الوكيل غير صحيح — تحقق من مطابقة صيغة type:host:port:user:pass.
  • الوكيل يتطلب إدراج IP في القائمة البيضاء — تأكد إن كان مزوّد الوكيل يقصر الوصول على عناوين IP محددة.
  • انتهت صلاحية بيانات اعتماد الوكيل — اختبر اتصال الوكيل مباشرةً.
  • نوع الوكيل المحدد خاطئ — راجع HTTP مقابل SOCKS4 مقابل SOCKS5.
  • الخادم الوكيل متوقف — اختبر الاتصال بالوكيل على المنفذ.
  • أحرف خاصة في كلمة المرور — طبّق ترميز URL على كلمة المرور.

في أغلب تذاكر الدعم يكون المتهم الأول أحد أمرين: صيغة غير مطابقة، أو وكيل مربوط بالقائمة البيضاء لعنوان IP لا يشمل خادم CaptchaAI. عالِج هذين الاحتمالين أولاً قبل الانتقال إلى ما دونهما، فهما يفسّران غالبية الحالات.

التنسيق الصحيح لبيانات الوكيل في CaptchaAI

يتوقع CaptchaAI الوكيل بهذا التنسيق تحديداً، والنقطتان : هي الفاصل بين الحقول؛ مرّر proxytype منفصلاً عن سلسلة proxy نفسها:

proxytype: HTTP | HTTPS | SOCKS4 | SOCKS5
proxy: host:port:username:password
import requests

# Correct format
data = {
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "proxytype": "HTTP",
    "proxy": "192.168.1.1:8080:myuser:mypass",
    "json": 1,
}

resp = requests.post("https://ocr.captchaai.com/in.php", data=data)

صيغ الوكيل المختلفة حسب البروتوكول

تختلف سلسلة الوكيل بحسب وجود مصادقة من عدمها وبحسب البروتوكول. اختر الصيغة المناسبة لحالتك:

  1. مع مصادقة — الشكل الأكثر شيوعاً لوكلاء حل CAPTCHA: host:port:username:password.
  2. بدون مصادقة — نادر، إذ يعتمد معظم المزوّدين على اسم مستخدم وكلمة مرور: host:port.
  3. عبر SOCKS5 — اضبط proxytype على SOCKS5 مع سلسلة الوكيل نفسها.
# With authentication
proxy = "192.168.1.1:8080:username:password"

# Without authentication (rare — most captcha proxies need auth)
proxy = "192.168.1.1:8080"

# SOCKS5
proxytype = "SOCKS5"
proxy = "192.168.1.1:1080:user:pass"

اختبر الوكيل قبل إرساله إلى CaptchaAI

import re
import requests


def validate_proxy(proxy_str, proxy_type="HTTP"):
    """Validate proxy format and connectivity."""
    # Check format
    parts = proxy_str.split(":")
    if len(parts) < 2:
        raise ValueError(f"Invalid proxy format: {proxy_str}")

    host = parts[0]
    port = parts[1]

    if not port.isdigit():
        raise ValueError(f"Invalid port: {port}")

    # Check proxy type
    valid_types = {"HTTP", "HTTPS", "SOCKS4", "SOCKS5"}
    if proxy_type not in valid_types:
        raise ValueError(f"Invalid proxy type: {proxy_type}")

    return True


def test_proxy(proxy_str, proxy_type="HTTP"):
    """Test if proxy is working."""
    parts = proxy_str.split(":")
    host = parts[0]
    port = parts[1]

    if len(parts) == 4:
        user, password = parts[2], parts[3]
        proxy_url = f"{proxy_type.lower()}://{user}:{password}@{host}:{port}"
    else:
        proxy_url = f"{proxy_type.lower()}://{host}:{port}"

    proxies = {"http": proxy_url, "https": proxy_url}

    try:
        resp = requests.get(
            "https://httpbin.org/ip",
            proxies=proxies,
            timeout=10,
        )
        print(f"Proxy working. IP: {resp.json()['origin']}")
        return True
    except Exception as e:
        print(f"Proxy failed: {e}")
        return False


# Test before using with CaptchaAI
proxy = "192.168.1.1:8080:user:pass"
if test_proxy(proxy, "HTTP"):
    print("Proxy is ready to use")

أوفر طريقة لتفادي الخطأ هي التأكد من صحة الوكيل محلياً قبل تمريره إلى الـ API؛ فالفشل المبكر داخل سكربتك أوضح بكثير من رسالة خطأ عائدة من الخادم. الدالة الأولى تتحقق من الصيغة، والثانية تختبر الاتصال الفعلي عبر الوكيل قبل أي إرسال.

التعامل مع الرموز الخاصة في كلمة المرور

from urllib.parse import quote


def format_proxy(host, port, username, password):
    """Format proxy string, handling special characters."""
    # URL-encode password if it contains special characters
    safe_password = quote(password, safe="")
    return f"{host}:{port}:{username}:{safe_password}"


# Password with special characters
proxy = format_proxy("192.168.1.1", "8080", "user", "p@ss:word!")

كلمة مرور فيها : أو @ أو # تكسر تنسيق host:port:user:pass، لأن النقطتين تعملان كفاصل بين الحقول. طبّق ترميز URL على كلمة المرور وحدها قبل تجميع السلسلة، فتتحول p@ss:word! إلى صيغة آمنة لا تربك المُحلِّل.

كشف بروتوكول الوكيل الصحيح

def detect_proxy_type(host, port):
    """Try to detect which proxy protocol works."""
    import socket

    for proxy_type in ["HTTP", "SOCKS5", "SOCKS4"]:
        try:
            # Basic TCP connection test
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(5)
            result = sock.connect_ex((host, int(port)))
            sock.close()

            if result == 0:
                return proxy_type  # Port is open, try this type
        except Exception:
            continue

    return None

إن لم تكن متأكداً من البروتوكول الذي يقبله الوكيل، جرّب الاتصال على المنفذ واستنتج البروتوكول العامل؛ يفتح السكربت أعلاه اتصال TCP بسيطاً ويعيد أول نوع ينجح.

جدول تشخيص سريع للأخطاء المتكررة

عندما يستمر الخطأ رغم صحة الصيغة، طابِق حالتك مع الصفوف التالية للوصول إلى الإجراء المناسب مباشرةً:

المشكلة السبب الإجراء
الخطأ يظهر رغم صحة بيانات الاعتماد الوكيل يتطلب إدراج IP في القائمة البيضاء أدرج عناوين IP الخاصة بـ CaptchaAI في القائمة البيضاء أو اعتمد على وكلاء بمصادقة اسم المستخدم وكلمة المرور
يعمل محلياً ويفشل عبر CaptchaAI عنوان IP لخادم CaptchaAI غير مُدرج في القائمة البيضاء استخدم مصادقة اسم المستخدم وكلمة المرور بدلاً من قصر الوصول على IP
فشل وكيل SOCKS نوع البروتوكول المحدد خاطئ جرّب SOCKS5 أو SOCKS4
فشل مصادقة متقطع تحديد معدل الطلبات على الوكيل استخدم وكلاء مخصصين (dedicated) بجودة أعلى
كلمة مرور فيها : تكسر التنسيق أحرف خاصة لم تُرمّز طبّق ترميز URL على كلمة المرور

سيناريو شائع يوضح الصف الثاني: مطوّر في القاهرة يشغّل سكربت الاستخراج من خادم سحابي في فرانكفورت، بينما زوّده مزوّد الوكيل بوصول مقيّد بعنوان IP مكتبه فقط. يعمل الوكيل من جهازه المحلي ويفشل من الخادم السحابي — وهذا بالضبط ما يولّد ERROR_PROXY_NOT_AUTHORIZED. الحل التحوّل إلى مصادقة اسم المستخدم وكلمة المرور التي تعمل من أي عنوان IP.

أسئلة شائعة

لماذا يظهر الخطأ رغم أن الوكيل يعمل داخل متصفحي؟

الأرجح أن مزوّد الوكيل يعتمد على إدراج عنوان IP في القائمة البيضاء. متصفحك يتصل من عنوان IP مُصرّح له، بينما يتصل خادم CaptchaAI من عنوان مختلف غير مُدرج. فعّل المصادقة باسم المستخدم وكلمة المرور بدلاً من قصر الوصول على IP واحد، أو أدرج عناوين CaptchaAI لدى المزوّد.

كيف أتعامل مع كلمة مرور تحتوي على : أو @؟

هذه الرموز تكسر تنسيق host:port:user:pass لأن النقطتين فاصل بين الحقول. طبّق ترميز URL على كلمة المرور وحدها قبل تجميع السلسلة — كما في دالة format_proxy أعلاه — لتتحول p@ss:word! إلى صيغة آمنة لا تربك المُحلِّل.

هل الأفضل استخدام وكيل سكني أم من مركز بيانات؟

يعتمد على الموقع المستهدف. الوكلاء السكنيون أقل عرضة للحظر على المواقع الصارمة لكنهم أبطأ وأعلى تكلفة، ووكلاء مراكز البيانات أسرع وأرخص ويكفون معظم اختبارات CAPTCHA العادية. ابدأ بالأوفر وارتقِ عند تكرار الحظر.

هل تؤثر خطة CaptchaAI على مصادقة الوكيل؟

لا، مصادقة الوكيل مستقلة تماماً عن خطتك. جميع الخطط بدءاً من BASIC ($15 شهرياً، 5 threads) تتعامل مع معلمات الوكيل بالطريقة نفسها؛ الخطة الأعلى تمنحك عدد threads أكبر للتشغيل المتوازي فقط، لا قواعد وكيل مختلفة.

أدلة ذات صلة

عالِج مشكلات الوكيل بسرعة — ابدأ الحل مع CaptchaAI.

التعليقات غير مفعّلة لهذا المقال.