કસ્ટમ 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 સંદેશાઓ પણ સંભાળે છે.

સંબંધિત લેખો