بعضی برنامه‌ها IP:port می‌خواهند. برخی دیگر به URL با پیشوند http:// یا socks5:// نیاز دارند. تنظیمات مرورگر اغلب نشانی و پورت را در فیلدهای جدا می‌گذارند. پس یک نقطه پایانی می‌تواند بدون تغییر نشانی، چند قالب نمایش داشته باشد.

یک ورودی IPv4

فرض کنید یک فهرست پروکسی HTTP پروکسی HTTP نمونه 203.0.113.10:8080 را ارائه می‌کند.

آنچه برنامه می‌خواهدوارد کنید
میزبان یا IP203.0.113.10
پورت8080
URL پروکسی HTTPhttp://203.0.113.10:8080

پورت را دوبار وارد نکنید. اگر برنامه فیلد پورت جداگانه دارد، نوشتن 203.0.113.10:8080 در فیلد میزبان ممکن است باعث شود کل رشته را به‌عنوان نام میزبان resolve کند. همچنین به فیلدی که صریحاً فقط نشانی IP می‌خواهد، scheme اضافه نکنید.

scheme باید با سرویس سازگار باشد. پیش از تبدیل نشانی، HTTP یا SOCKS5 را بر اساس پشتیبانی کلاینت انتخاب کنید. نوشتن socks5:// جلوی یک نقطه پایانی HTTP، آنچه کلاینت می‌فرستد را تغییر می‌دهد؛ SOCKS5 را روی آن سرور فعال نمی‌کند.

IPv6 در URL به کروشه نیاز دارد

نشانی IPv6 از قبل دونقطه دارد، پس URL پیش از افزودن پورت، نشانی را در کروشه قرار می‌دهد:

http://[2001:db8::10]:8080
socks5://[2001:db8::10]:1080

بدون کروشه، مرز نشانی و پورت مبهم است. برنامه‌ای با فیلدهای جدا معمولاً 2001:db8::10 را برای میزبان و 8080 را برای پورت می‌خواهد؛ قالب ورودی همان برنامه را رعایت کنید. هر دو نشانی اینجا نمونه مستنداتی‌اند، نه پروکسی فعال.

URL را تجزیه کنید، نه اینکه در هر دونقطه آن را بشکنید

یک اسکریپت کوتاه Python می‌تواند با تجزیه‌گر استاندارد URL، نشانی‌های IPv4 و IPv6 دارای کروشه را پردازش کند:

from urllib.parse import urlsplit

proxy = urlsplit("http://[2001:db8::10]:8080")
print(proxy.scheme)
print(proxy.hostname)
print(proxy.port)

ویژگی hostname نشانی را بدون کروشه برمی‌گرداند. شکستن رشته اصلی در هر دونقطه این مثال را خراب می‌کند. در ابزار واردسازی واقعی، میزبان خالی، scheme پشتیبانی‌نشده و پورت خارج از 1–65535 را هم رد کنید. تجزیه URL اجزای آن را می‌دهد؛ وجود سرویس را ثابت نمی‌کند.

وقتی فهرست نام کاربری و گذرواژه دارد

یک ساختار رایج URL، http://username:password@host:port است. نویسه‌هایی مثل @، # و / در اطلاعات ورود به URL encoding درست نیاز دارند. اگر کلاینت فیلدهای جداگانه اطلاعات ورود دارد، استفاده از آن‌ها معمولاً آسان‌تر از ساخت دستی URL است.

پیش از تبدیل رشته اطلاعات ورودی که با دونقطه جدا شده، قالب اصلی ارائه‌دهنده را بررسی کنید. چهار فیلد جداشده با دونقطه معنای همگانی ندارند و خود گذرواژه هم ممکن است دونقطه داشته باشد. تجزیه‌گر طراحی‌شده برای سطرهای ساده IP:port نباید قالب دیگری را بی‌سروصدا حدس بزند.

مقالات مرتبط