Errore proxy HttpClient 4: il protocollo http non è supportato
Mantenete la factory HTTP semplice in un registro Apache HttpClient 4 personalizzato quando una rotta HTTPS si collega prima a un proxy HTTP.
In un'applicazione Apache HttpClient 4, una destinazione HTTPS non significa che ogni connessione inizi con TLS. Si raggiunge un normale proxy HTTP tramite una connessione in chiaro prima che CONNECT apra il tunnel e TLS venga sovrapposto verso la destinazione.
Se un gestore di connessioni personalizzato registra solo https, il primo salto attraverso il proxy può fallire con UnsupportedSchemeException: http protocol is not supported.
Per l'API 4.5, includete entrambe le factory durante la costruzione di quel gestore:
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 è l'SSLConnectionSocketFactory esistente dell'applicazione, con la prevista verifica di attendibilità e del nome host. I tipi mostrati appartengono ai pacchetti org.apache.http di Apache 4. Il frammento presuppone l'inferenza dei tipi delle variabili locali di Java; il codice Java più vecchio può usare tipi espliciti.
Collegate il gestore corretto al client effettivamente usato per la richiesta. Per una richiesta HTTPS pubblica consentita senza autenticazione proxy, una voce HTTP dall'elenco dei proxy HTTP può riempire l'indirizzo proxy di HttpHost. Configurare un altro builder non aggiorna un client già costruito.
Esaminate anche la proprietà del builder: HttpClientBuilder documenta che un gestore di connessioni fornito esplicitamente può prevalere sui suoi input separati di configurazione SSL. Mettete le factory necessarie nel registro del gestore invece di supporre che una successiva chiamata a setSSLContext ne sostituirà gli interni.
Questa diagnosi riguarda il registro locale degli schemi. Una richiesta di autenticazione proxy o una destinazione negata è un risultato successivo e diverso. Conservate entrambe le registrazioni delle factory mentre investigate quelle risposte.