یک سوکت خام پایتون صرفاً به دلیل وجود http_proxy دربارهٔ پروکسی مذاکره نمی‌کند. برای برنامه‌ای که پروتکل TCP خودش را صحبت می‌کند، از اتصال‌دهنده‌ای استفاده کنید که سرویس را در نقطهٔ پایانی پروکسی می‌فهمد.

وقتی PySocks از قبل در دسترس است، اتصال را صریحاً ایجاد کنید:

import socks

with socks.socksocket() as connection:
    connection.set_proxy(socks.SOCKS5, '203.0.113.10', 1080)
    connection.settimeout(10)
    connection.connect(('example.com', 12345))
    # Exchange the destination protocol here.

آدرس مستندات و پورت مقصد را جایگزین کنید. برای یک مقصد عمومی مجاز، تنها پس از بررسی اینکه پورت هدف برنامه را مجاز می‌کند، نامزدی از فهرست پروکسی SOCKS5 انتخاب کنید. بستهٔ نصب‌شده، روش‌های پشتیبانی‌شده و الزامات نقطهٔ پایانی را با رابط PySocks بررسی کنید.

بقیهٔ برنامه پروتکل خود را روی این اتصال برقرارشده مبادله می‌کند. اگر آن پروتکل از TLS استفاده می‌کند، آن را پس از مذاکرهٔ پروکسی شروع کنید و نام میزبان واقعی مقصد را بررسی کنید. احراز هویت پروکسی مسیر را برقرار می‌کند؛ ورود به مقصد یا رمزنگاری را فراهم نمی‌کند.

یک شنوندهٔ SOCKS به مذاکرهٔ SOCKS نیاز دارد. یک سرویس HTTP به اتصال‌دهنده‌ای با پشتیبانی CONNECT برای مقصد TCP دلخواه نیاز دارد و ممکن است پورت آن را رد کند. اتصال‌دهنده را بر اساس سرویسی که واقعاً ارائه می‌شود انتخاب کنید، نه با تغییر یک آدرس و باقی گذاشتن دست‌دادن نادرست.

جایگزینی را محلی نگه دارید. اختصاص یک کلاس به socket.socket می‌تواند واردات و کتابخانه‌های نامرتبط را تحت تأثیر قرار دهد. اگر کتابخانهٔ دیگری مالک ایجاد سوکت است، از کارخانهٔ اتصال یا گزینهٔ پروکسی مستند آن استفاده کنید؛ واژه‌نامه‌ای که هرگز آن را نمی‌خواند نمی‌تواند آن اتصال را تغییر دهد.

مقالات مرتبط