پرش به محتویات

راهنمای اتصال با Requests

این راهنما نحوه راه‌اندازی، اجرا و تست یک پروکسی فعال را با استفاده از تمامی متدها و ویژگی‌های کتابخانه v2socks به همراه کتابخانه محبوب requests نشان می‌دهد.

نمونه کد کامل اتصال

اسکریپت زیر یک کد کامل پایتون است که نحوه اجرای کلاینت، محاسبه تاخیر اتصال به سرور هدف، خروجی گرفتن از کانفیگ نهایی، روت کردن ترافیک و مدیریت تمامی خطاهای احتمالی را نشان می‌دهد:

import requests
from v2socks import (
    V2Socks,
    V2SocksError,
    ParseError,
    CoreNotFoundError,
    DownloadError,
    ConnectionError
)

# لینک کانفیگ ویتورای خود را در اینجا قرار دهید (VLESS / VMess / Trojan)
CONFIG_LINK = "your-v2ray-config-link-here"

def run_proxy_test():
    try:
        # ۱. راه‌اندازی پروکسی با استفاده از Context Manager
        # (هسته Xray در اولین اجرا به صورت خودکار دانلود می‌شود)
        with V2Socks(CONFIG_LINK, verbose=True) as proxy:

            # ۲. دریافت پورت و آدرس هاست پروکسی فعال‌شده
            proxy_port = proxy.port()
            proxy_host = proxy.host
            print(f"Proxy is running locally on: {proxy_host}:{proxy_port}")

            # ۳. دریافت آدرس کامل پروکسی SOCKS5
            proxy_url = proxy.socks_url
            print(f"SOCKS5 proxy URL: {proxy_url}")

            # ۴. اندازه‌گیری تاخیر اتصال به سرور هدف (گوگل) بر حسب میلی‌ثانیه
            try:
                latency = proxy.delay("https://www.google.com", timeout=5.0)
                print(f"Connection latency: {latency:.2f} ms")
            except ConnectionError as conn_err:
                print(f"Latency measurement failed: {conn_err}")

            # ۵. خروجی گرفتن از کانفیگ ساختار یافته Xray به صورت دیکشنری پایتون
            config_dict = proxy.export_config()
            print("Generated Xray config outbound protocol:", config_dict["outbounds"][0]["protocol"])

            # ۶. پیکربندی دیکشنری پروکسی برای استفاده در کتابخانه requests
            # (استفاده از socks5h باعث می‌شود حل نام دامنه DNS در سمت سرور پروکسی انجام شود)
            proxies = {
                "http": f"socks5h://{proxy_host}:{proxy_port}",
                "https": f"socks5h://{proxy_host}:{proxy_port}"
            }

            # ۷. ارسال درخواست HTTP امن از طریق پروکسی ساکس ۵
            print("Fetching public IP address via proxy...")
            response = requests.get("http://ip-api.com/json", proxies=proxies, timeout=10.0)
            response.raise_for_status()

            # ۸. نمایش اطلاعات لوکیشن آی‌پی پروکسی
            data = response.json()
            print("\n--- Connection Success ---")
            print(f"Proxy Public IP: {data.get('query')}")
            print(f"Country Location: {data.get('country')} ({data.get('countryCode')})")
            print(f"ISP Provider:     {data.get('isp')}")
            print("--------------------------")

    # مدیریت خطاها به صورت کاملاً اختصاصی و مجزا
    except ParseError as e:
        print(f"Parsing error (invalid config link): {e}")
    except CoreNotFoundError as e:
        print(f"Xray core binary error: {e}")
    except DownloadError as e:
        print(f"Failed to download Xray core: {e}")
    except ConnectionError as e:
        print(f"Proxy connection test failed: {e}")
    except V2SocksError as e:
        print(f"General v2socks library error: {e}")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

if __name__ == "__main__":
    run_proxy_test()