ഒരു ഇഷ്ടാനുസൃത 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 ക്ലയന്റാണ് കൂടുതൽ സൗകര്യപ്രദമായ ഇന്റർഫേസ്.

അനുബന്ധ ലേഖനങ്ങൾ