Apache HttpClient 4 એપ્લિકેશનમાં HTTPS ગંતવ્યનો અર્થ એ નથી કે દરેક કનેક્શન TLS સાથે શરૂ થાય. સાદા HTTP પ્રોક્સી સુધી અસંકેતિત કનેક્શન દ્વારા પહોંચાય છે, તે પહેલાં CONNECT ટનલ ખોલે છે અને ગંતવ્ય તરફ TLS સ્તરિત થાય છે.

જો કસ્ટમ કનેક્શન મેનેજર ફક્ત https નોંધે, તો પ્રથમ પ્રોક્સી કૂદકો UnsupportedSchemeException: http protocol is not supported સાથે નિષ્ફળ થઈ શકે.

4.5 API માટે, તે મેનેજર બનાવતી વખતે બંને ફેક્ટરીનો સમાવેશ કરો:

var registry = RegistryBuilder.<ConnectionSocketFactory>create()
    .register("http", PlainConnectionSocketFactory.getSocketFactory())
    .register("https", tlsFactory)
    .build();

var manager = new PoolingHttpClientConnectionManager(registry);
var client = HttpClients.custom()
    .setConnectionManager(manager)
    .setProxy(new HttpHost("proxy.example.net", 8080, "http"))
    .build();

tlsFactory એ એપ્લિકેશનની હાલની SSLConnectionSocketFactory છે, તેની ઇચ્છિત વિશ્વાસ અને હોસ્ટનામ ચકાસણી સાથે. દર્શાવેલા પ્રકારો Apache 4 ના org.apache.http પેકેજોના છે. આ ટુકડો Java ના સ્થાનિક ચલ પ્રકાર-અનુમાનને ધારે છે; જૂનો Java કોડ સ્પષ્ટ પ્રકારો વાપરી શકે.

સુધારેલા મેનેજરને વિનંતી માટે ખરેખર વપરાતા ક્લાયન્ટ સાથે જોડો. પ્રોક્સી પ્રમાણીકરણ વિના મંજૂર જાહેર HTTPS વિનંતી માટે, HTTP પ્રોક્સી યાદીમાંથી HTTP એન્ટ્રી HttpHost નું પ્રોક્સી સરનામું ભરી શકે. બીજું બિલ્ડર ગોઠવવાથી પહેલેથી બનેલો ક્લાયન્ટ અપડેટ થતો નથી.

બિલ્ડરની માલિકી પણ તપાસો: HttpClientBuilder દસ્તાવેજ કરે છે કે સ્પષ્ટ રીતે આપેલો કનેક્શન મેનેજર તેના અલગ SSL રૂપરેખાંકન ઇનપુટને બાજુ પર મૂકી શકે. જરૂરી ફેક્ટરીઓ મેનેજરની રજિસ્ટ્રીમાં મૂકો, પછીનો setSSLContext કૉલ તેના આંતરિક ભાગને બદલશે એમ ધારવાને બદલે.

આ નિદાન સ્થાનિક સ્કીમ રજિસ્ટ્રીને લગતું છે. પ્રોક્સી પ્રમાણીકરણ પડકાર અથવા નકારાયેલું ગંતવ્ય પછીનું, અલગ પરિણામ છે. તે પ્રતિભાવોની તપાસ કરતી વખતે બંને ફેક્ટરી નોંધણીઓ જાળવી રાખો.

સંબંધિત લેખો