Dalam aplikasi Apache HttpClient 4, destinasi HTTPS tidak bermakna setiap sambungan bermula dengan TLS. Proksi HTTP biasa dicapai melalui sambungan tanpa penyulitan sebelum CONNECT membuka terowong dan TLS dilapiskan ke arah destinasi.

Jika pengurus sambungan tersuai mendaftarkan https sahaja, lompatan proksi pertama mungkin gagal dengan UnsupportedSchemeException: http protocol is not supported.

Untuk API 4.5, sertakan kedua-dua kilang semasa membina pengurus itu:

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 ialah SSLConnectionSocketFactory sedia ada aplikasi, dengan pengesahan kepercayaan dan nama hos yang dimaksudkan. Jenis yang ditunjukkan tergolong dalam pakej org.apache.http Apache 4. Coretan ini menganggap inferens jenis pemboleh ubah setempat Java; kod Java lama boleh menggunakan jenis eksplisit.

Lampirkan pengurus yang dibetulkan pada klien yang benar-benar digunakan untuk permintaan. Untuk permintaan HTTPS awam yang dibenarkan tanpa pengesahan proksi, entri HTTP daripada senarai proksi HTTP boleh mengisi alamat proksi HttpHost. Mengkonfigurasi builder lain tidak mengemas kini klien yang sudah dibina.

Periksa juga pemilikan builder: HttpClientBuilder mendokumenkan bahawa pengurus sambungan yang diberikan secara eksplisit boleh mengatasi input konfigurasi SSL berasingannya. Letakkan kilang yang diperlukan dalam daftar pengurus dan bukannya menganggap panggilan setSSLContext kemudian akan menggantikan bahagian dalamnya.

Diagnosis ini berkaitan daftar skema setempat. Cabaran pengesahan proksi atau destinasi yang ditolak ialah hasil kemudian yang berbeza. Kekalkan kedua-dua pendaftaran kilang semasa anda menyiasat respons tersebut.

Artikel berkaitan