OpenJDK 25 میں Java Socket HTTP CONNECT ٹنلز
OpenJDK 25 میں HTTP پراکسی ساکٹ راستہ استعمال کریں تاکہ اجازت یافتہ TCP سروس تک پہنچ سکیں، جبکہ پراکسی کا آخری نقطہ اور منزل الگ رکھیں۔
ایک حسبِ ضرورت TCP پروٹوکول HTTP پراکسی کے ذریعے سفر کر سکتا ہے جب وہ پراکسی منزل کی طرف CONNECT کی اجازت دے۔ ایپلیکیشن پروٹوکول کو HTTP بننے کی ضرورت نہیں: HTTP سرنگ قائم کرتا ہے، پھر ایپلیکیشن اپنے بائٹس اُس کے اندر تبدیل کرتی ہے۔
OpenJDK 25 Socket(Proxy) میں HTTP پراکسی راستہ فراہم کرتا ہے۔ اس کا نفاذ CONNECT تبادلہ کرتا ہے اور ایپلیکیشن کے استعمال کے لیے منسلک ساکٹ واپس کرتا ہے۔
Proxy route = new Proxy(
Proxy.Type.HTTP,
new InetSocketAddress("proxy.example", 8080));
try (Socket socket = new Socket(route)) {
socket.setSoTimeout(10000);
socket.connect(
InetSocketAddress.createUnresolved("tcp-service.example", 8443),
5000);
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();
}یہ حصہ java.net اور java.io کی کلاسیں استعمال کرتا ہے۔ دونوں آخری نقطے بدلیں اور try بلاک چھوڑنے سے پہلے پروٹوکول تبادلہ کریں۔ اجازت یافتہ عوامی TCP ہدف کے لیے، اُس ہدف کے پورٹ کے لیے CONNECT اجازت جانچنے کے بعد ہی HTTP پراکسی فہرست سے HTTP امیدوار منتخب کریں۔ پراکسی کا پتہ وہ جگہ ہے جہاں Java پہلے جڑتی ہے؛ connect کو دیا گیا پتہ اُس سروس کی نشاندہی کرتا ہے جہاں پراکسی کو پہنچنا چاہیے۔
غیر حل شدہ منزل اِس نفاذ کی CONNECT درخواست کے لیے اپنا ہوسٹ نام محفوظ رکھتی ہے۔ اس کے برعکس حل شدہ InetSocketAddress اُس درخواست کو اپنا حل شدہ IP پتہ فراہم کرتا ہے۔ یہ فرق اُس وقت اہم ہے جب پراکسی کو سروس کا نام حل کرنا ہو یا ہوسٹ نام کی بنیاد پر پالیسی لاگو کرنی ہو۔
کامیاب کنکشن آپ کے پاس کیا چھوڑتا ہے
حاصل ہونے والی اسٹریمیں سرنگ والی سروس کا ڈیٹا لے جاتی ہیں۔ وہ کوئی الگ HTTP جواب ظاہر نہیں کرتیں جسے آپ کی ایپلیکیشن پڑھ کر پھینک دے۔ دوسرا CONNECT تبادلہ شامل کرنے سے JDK کی جانب سے سرنگ پہلے ہی قائم کرنے کے بعد سروس کو HTTP متن بھیجا جائے گا۔
مثال کنکشن ٹائم آؤٹ اور ساکٹ پڑھنے کا ٹائم آؤٹ مقرر کرتی ہے؛ یہ الگ کنٹرولز ہیں، ایپلیکیشن سیشن کے لیے کوئی ایک مجموعی آخری مہلت نہیں۔
CONNECT کی اجازت اب بھی پراکسی کی ہے۔ عام ویب درخواستیں آگے بھیجنے والا آخری نقطہ سروس کا پورٹ مسترد کر سکتا ہے یا سرنگ کھولنے سے پہلے تصدیق طلب کر سکتا ہے۔ اُن ناکامیوں کو اُس سرور سے الگ رکھیں جو سرنگ قبول کرتا ہے مگر بعد میں آپ کا ایپلیکیشن پروٹوکول مسترد کر دیتا ہے۔
اگر اُس پروٹوکول کو TLS درکار ہو تو منسلک ساکٹ کے ذریعے سروس کے مطلوبہ ہوسٹ نام اور معمول کے سرٹیفکیٹ معائنوں کے ساتھ TLS پر بات چیت کریں۔ صرف CONNECT اسٹریم کو خفیہ نہیں کرتا۔ حقیقی HTTP API کے لیے، HTTP کلائنٹ زیادہ سہولت بخش انٹرفیس رہتا ہے کیونکہ وہ HTTP پیغامات بھی سنبھالتا ہے۔