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 सन्देशहरू पनि सम्हाल्ने हुनाले बढी सुविधाजनक इन्टरफेस रहन्छ।