الوكيل لا يدعم البروتوكول المطلوب: ماذا تفعل
لقد قمت بإعداد الوكيل (البروكسي)، وشغّلت السكريبت — وتلقيت خطأ "Protocol not supported" أو "Connection refused". مشكلة عدم توافق البروتوكولات تحدث أكثر مما تتوقع. سنناقش سبب حدوث ذلك وكيفية حل المشكلة دون تغيير مزود الخدمة.
البروتوكولات التي تستخدمها الوكلاء
قبل حل المشكلة، من المهم فهم الاختلاف بين البروتوكولات. لكل منها مجال تطبيق وقيود خاصة به.
| البروتوكول | المنافذ الافتراضية | الميزات |
|---|---|---|
| HTTP | 80, 8080, 3128 | حركة مرور HTTP فقط، يمكنه تعديل الرؤوس (Headers) |
| HTTPS (CONNECT) | 443, 8443 | نقل البيانات عبر أمر HTTP CONNECT، تشفير |
| SOCKS4 | 1080 | اتصالات TCP، بدون مصادقة، بدون UDP |
| SOCKS5 | 1080, 1081 | يدعم TCP و UDP، مصادقة، تحليل DNS عبر الوكيل |
التعارضات الشائعة:
- Selenium و Puppeteer يتطلبان HTTP/HTTPS، لكن لديك SOCKS5
- برامج Telegram-bots تعمل عبر SOCKS5، لكن الوكيل يدعم HTTP فقط
- عملاء التورنت يتطلبون SOCKS5 مع UDP، لكن الوكيل هو SOCKS4
- تطبيقات الألعاب تتطلب UDP، لكن وكلاء HTTP لا يدعمونها
التشخيص: تحديد بروتوكول الوكيل
إذا لم يحدد الموفر البروتوكول صراحةً أو كنت غير متأكد، تحقق من الوكيل بنفسك.
الاختبار باستخدام curl
اختبار بروتوكول HTTP:
# وكيل HTTP
curl -x http://proxy_ip:port http://httpbin.org/ip
# مع المصادقة
curl -x http://user:pass@proxy_ip:port http://httpbin.org/ip
اختبار SOCKS5:
# وكيل SOCKS5
curl -x socks5://proxy_ip:port http://httpbin.org/ip
# SOCKS5 مع تحليل DNS عبر الوكيل (socks5h)
curl -x socks5h://proxy_ip:port http://httpbin.org/ip
إذا أعادت الأوامر عنوان IP الخاص بالوكيل، فهذا يعني أن البروتوكول محدد بشكل صحيح. إذا ظهر خطأ Connection refused أو Unsupported proxy، فالبروتوكول غير صحيح.
الاختبار عبر Python
import requests
proxy_ip = "proxy_ip:port"
# اختبار HTTP
try:
r = requests.get("http://httpbin.org/ip",
proxies={"http": f"http://{proxy_ip}"},
timeout=10)
print(f"HTTP يعمل: {r.json()}")
except Exception as e:
print(f"HTTP لا يعمل: {e}")
# اختبار SOCKS5 (يتطلب pip install requests[socks])
try:
r = requests.get("http://httpbin.org/ip",
proxies={"http": f"socks5://{proxy_ip}"},
timeout=10)
print(f"SOCKS5 يعمل: {r.json()}")
except Exception as e:
print(f"SOCKS5 لا يعمل: {e}")
الكشف التلقائي
سكريبت لتجربة البروتوكولات:
import requests
def detect_protocol(proxy_address):
protocols = ["http", "https", "socks4", "socks5", "socks5h"]
for proto in protocols:
try:
proxies = {
"http": f"{proto}://{proxy_address}",
"https": f"{proto}://{proxy_address}"
}
r = requests.get("http://httpbin.org/ip",
proxies=proxies, timeout=5)
if r.status_code == 200:
return proto
except:
continue
return None
result = detect_protocol("proxy_ip:port")
print(f"البروتوكول المكتشف: {result}")
تحويل HTTP إلى SOCKS والعكس
إذا كان الوكيل يدعم بروتوكولاً مختلفاً عما يحتاجه برنامجك، استخدم محولاً محلياً.
Privoxy: HTTP ← SOCKS
يقبل Privoxy طلبات HTTP ويوجهها عبر وكيل SOCKS.
التثبيت:
# Ubuntu/Debian
sudo apt install privoxy
# macOS
brew install privoxy
# Windows — تحميل من الموقع الرسمي
الإعداد (ملف /etc/privoxy/config):
# الاستماع على المنفذ المحلي 8118 (HTTP)
listen-address 127.0.0.1:8118
# التوجيه عبر وكيل SOCKS5 الخارجي
forward-socks5 / socks_proxy_ip:1080 .
# مع المصادقة
forward-socks5 / user:pass@socks_proxy_ip:1080 .
الآن، يتصل برنامجك بـ 127.0.0.1:8118 عبر HTTP، ويتم توجيه حركة المرور عبر SOCKS5.
Gost: محول عالمي
Gost أداة قوية لأي تحويلات بروتوكول.
# وكيل HTTP كمدخل ← SOCKS5 كمخرج
gost -L http://:8080 -F socks5://socks_proxy_ip:1080
# وكيل SOCKS5 كمدخل ← HTTP كمخرج
gost -L socks5://:1080 -F http://http_proxy_ip:8080
# مع المصادقة على كلا الطرفين
gost -L http://local_user:local_pass@:8080 \
-F socks5://remote_user:remote_pass@proxy_ip:1080
محول Python
محول بسيط للمهام الأساسية:
# pip install pproxy
# HTTP كمدخل، SOCKS5 كمخرج
pproxy -l http://:8080 -r socks5://proxy_ip:1080
# SOCKS5 كمدخل، HTTP كمخرج
pproxy -l socks5://:1080 -r http://proxy_ip:8080
إعداد الأنفاق المحلية
في بعض الأحيان، لا يكفي التحويل؛ أنت بحاجة إلى نفق كامل.
نفق SSH عبر وكيل HTTP
إذا كان لديك خادم SSH ووكيل HTTP، يمكنك إنشاء SOCKS5:
# إنشاء SOCKS5 على localhost:1080 عبر وكيل HTTP
ssh -D 1080 -o ProxyCommand="nc -X connect -x http_proxy:8080 %h %p" user@ssh_server
Stunnel لـ HTTPS
إذا كنت بحاجة إلى وكيل HTTPS ولديك وكيل HTTP فقط:
# stunnel.conf
[https-proxy]
client = yes
accept = 127.0.0.1:8443
connect = http_proxy_ip:8080
protocol = connect
protocolHost = target_host:443
تكوين البرامج لدعم البروتوكول المتاح
في بعض الأحيان يكون من الأسهل تكوين البرنامج لدعم البروتوكول المتاح بدلاً من تحويله.
Selenium مع بروتوكولات مختلفة
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# وكيل HTTP (الطريقة القياسية)
options = Options()
options.add_argument('--proxy-server=http://proxy_ip:8080')
# وكيل SOCKS5
options.add_argument('--proxy-server=socks5://proxy_ip:1080')
# لمتصفح Firefox مع SOCKS5
from selenium.webdriver.firefox.options import Options as FirefoxOptions
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", "proxy_ip")
profile.set_preference("network.proxy.socks_port", 1080)
profile.set_preference("network.proxy.socks_version", 5)
aiohttp مع SOCKS
# pip install aiohttp-socks
import aiohttp
from aiohttp_socks import ProxyConnector
async def fetch_with_socks():
connector = ProxyConnector.from_url('socks5://proxy_ip:1080')
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('http://httpbin.org/ip') as response:
return await response.json()
برامج Telegram-bots عبر HTTP
إذا كانت مكتبة Telegram تتطلب SOCKS5، ولكن لديك HTTP:
# python-telegram-bot مع وكيل HTTP
from telegram.ext import ApplicationBuilder
application = (
ApplicationBuilder()
.token("YOUR_TOKEN")
.proxy_url("http://proxy_ip:8080") # يعمل مع HTTP
.build()
)
نصيحة: العديد من المكتبات الحديثة تدعم كلا البروتوكولين. تحقق من الوثائق — قد يكون تغيير مخطط URL من
socks5://إلىhttp://كافياً.
كيفية اختيار وكيل بالبروتوكول المطلوب
لتجنب مشاكل البروتوكولات، حدد المتطلبات مسبقاً.
مصفوفة التوافق
| المهمة | البروتوكول الموصى به | السبب |
|---|---|---|
| كشط الويب (Web Scraping) | HTTP/HTTPS | دعم واسع، إعداد بسيط |
| أتمتة المتصفح | HTTP أو SOCKS5 | يعتمد على المتصفح والإطار المستخدم |
| برامج Telegram, Discord Bots | SOCKS5 | متطلبات المكتبات |
| التورنت | SOCKS5 مع UDP | DHT و PEX تستخدم UDP |
| الألعاب، الاتصال الصوتي (VoIP) | SOCKS5 مع UDP | زمن استجابة منخفض، حركة مرور UDP |
| استدعاءات API | HTTP/HTTPS | تعمل واجهات REST API عبر HTTP |
ما الذي يجب البحث عنه عند اختيار الموفر
- قائمة البروتوكولات المدعومة — يجب أن تكون مذكورة بوضوح
- إمكانية التبديل — بعض الموفرين يتيحون الوصول إلى نفس IP عبر منافذ/بروتوكولات مختلفة
- دعم UDP لـ SOCKS5 — ليست كل وكلاء SOCKS5 تدعم UDP
- وثائق الإعداد — أمثلة للغات وأدوات مختلفة
الوكلاء السكنية (Residential Proxies) عادةً ما تدعم HTTP/HTTPS و SOCKS5 في نفس الوقت، مما يزيل معظم مشاكل التوافق. أما وكلاء مراكز البيانات (Datacenter Proxies) فغالباً ما تقتصر على HTTP/HTTPS.
قائمة التحقق قبل الشراء
- حدد البروتوكول الذي يتطلبه برنامجك
- تحقق مما إذا كنت بحاجة إلى UDP (للألعاب، التورنت، VoIP)
- استفسر من الموفر عن دعم البروتوكول المطلوب
- اطلب وصولاً تجريبياً للتحقق من التوافق
- جهز خطة بديلة — محول محلي
الخلاصة
عدم توافق البروتوكولات مشكلة قابلة للحل. في معظم الحالات، يكون المحول المحلي مثل Privoxy أو Gost كافياً. بالنسبة للمشاريع طويلة الأمد، من الأفضل اختيار وكيل يدعم البروتوكول المطلوب مباشرة.
للمهام التي تتطلب مرونة في اختيار البروتوكول، تعتبر الوكلاء السكنية ذات الوصول متعدد البروتوكولات خياراً جيداً — تعرف على المزيد على proxycove.com.