Mengonfigurasi proksi di Azure SDK untuk Java

Artikel ini memperlihatkan cara mengonfigurasi proksi di Azure SDK untuk Java sehingga Anda dapat merutekan permintaan klien melalui batas jaringan dan keamanan yang diperlukan.

Konfigurasi proksi HTTP

Pustaka klien Azure untuk Java menawarkan berbagai cara untuk mengonfigurasi proksi untuk HttpClient.

Setiap metode penyediaan proksi memiliki pro dan kontra sendiri dan menyediakan tingkat enkapulasi yang berbeda. Saat Anda mengonfigurasi proksi untuk HttpClient, HttpClient akan menggunakan proksi tersebut selama sisa masa aktifnya. Dengan mengikat proksi ke individu HttpClient, aplikasi dapat menggunakan beberapa HttpClient instans di mana masing-masing dapat menggunakan proksi yang berbeda untuk memenuhi persyaratan proksi aplikasi.

Opsi konfigurasi proksi adalah:

Menggunakan proksi lingkungan

Secara default, penyusun klien HTTP memeriksa lingkungan untuk konfigurasi proksi. Proses ini menggunakan Azure SDK untuk API Java Configuration . Ketika penyusun membuat klien, ia mengonfigurasi klien dengan salinan konfigurasi global yang diambil dengan memanggil Configuration.getGlobalConfiguration(). Panggilan ini membaca konfigurasi proksi HTTP apa pun dari lingkungan sistem.

Saat penyusun memeriksa lingkungan, penyusun mencari konfigurasi lingkungan berikut dalam urutan yang ditentukan:

  1. HTTPS_PROXY
  2. HTTP_PROXY
  3. https.proxy*
  4. http.proxy*

* mewakili properti proksi Java yang terkenal. Untuk informasi selengkapnya, lihat Jaringan dan Proksi Java dalam dokumentasi Oracle.

Jika penyusun menemukan salah satu konfigurasi lingkungan, builder akan membuat instans ProxyOptions dengan memanggil ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration()). Artikel ini menyediakan detail selengkapnya tentang jenisnya ProxyOptions .

Penting

Untuk menggunakan HTTPS_PROXY atau HTTP_PROXY, Java secara implisit mengharuskan Anda mengatur properti java.net.useSystemProxies lingkungan sistem ke true.

Anda juga dapat membuat instans klien HTTP yang tidak menggunakan konfigurasi proksi apa pun yang ada di variabel lingkungan sistem. Untuk mengesampingkan perilaku default, secara eksplisit tetapkan Configuration yang dikonfigurasi berbeda di builder klien HTTP. Saat Anda menetapkan Configuration di builder, Configuration.getGlobalConfiguration() tidak lagi dipanggil. Misalnya, jika Anda memanggil configuration(Configuration) menggunakan Configuration.NONE, Anda dapat secara eksplisit mencegah penyusun memeriksa lingkungan untuk konfigurasi.

Contoh berikut menggunakan HTTP_PROXY variabel lingkungan dengan nilai localhost:8888 untuk menggunakan Fiddler sebagai proksi. Kode ini menunjukkan pembuatan Netty dan klien HTTP OkHttp. Untuk informasi selengkapnya tentang konfigurasi klien HTTP, lihat klien HTTP dan alur.

export HTTP_PROXY=localhost:8888
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder().build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder().build();

Untuk mencegah proksi lingkungan digunakan, konfigurasikan penyusun klien HTTP dengan Configuration.NONE, seperti yang ditunjukkan dalam contoh berikut:

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .configuration(Configuration.NONE)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .configuration(Configuration.NONE)
    .build();

Gunakan proksi konfigurasi

Alih-alih membaca dari lingkungan, konfigurasikan penyusun klien HTTP untuk menggunakan kustom Configuration dengan pengaturan proksi yang sama dengan yang sudah diterima lingkungan. Konfigurasi ini menawarkan kemampuan untuk memiliki konfigurasi yang dapat digunakan kembali yang dibatasi pada kasus penggunaan tertentu. Saat builder klien HTTP membangun HttpClient, builder tersebut menggunakan ProxyOptions yang dikembalikan dari ProxyOptions.fromConfiguration(<Configuration passed into the builder>).

Contoh berikut menggunakan konfigurasi yang diatur dalam objek http.proxy* untuk menggunakan proksi yang mengautentikasi Fiddler sebagai proksi.

Configuration configuration = new ConfigurationBuilder()
    .putProperty("http.proxyHost", "localhost")
    .putProperty("http.proxyPort", "8888")
    .putProperty("http.proxyUser", "1")
    .putProperty("http.proxyPassword", "1")
    .build();

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .configuration(configuration)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .configuration(configuration)
    .build();

Menggunakan proksi eksplisit

Pustaka klien Java menyertakan ProxyOptions kelas yang bertindak sebagai jenis pustaka klien Azure untuk mengonfigurasi proksi. Anda dapat mengonfigurasi ProxyOptions dengan protokol jaringan yang digunakan untuk mengirim permintaan proksi, alamat proksi, kredensial autentikasi proksi, dan host non-proksi. Hanya protokol jaringan proksi dan alamat proksi yang diperlukan. Saat menggunakan kredensial autentikasi, Anda harus mengatur nama pengguna dan kata sandi.

Contoh berikut membuat instance sederhana ProxyOptions yang memproksikan permintaan ke alamat Fiddler default (localhost:8888):

ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));

Contoh berikut membuat sebuah proksi yang diautentikasi ProxyOptions untuk meneruskan permintaan ke instans Fiddler yang memerlukan autentikasi proksi.

// Fiddler uses username "1" and password "1" with basic authentication as its proxy authentication requirement.
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888))
    .setCredentials("1", "1");

Anda dapat mengatur penyusun klien HTTP dengan ProxyOptions secara langsung untuk menunjukkan proksi eksplisit yang akan digunakan. Konfigurasi ini adalah cara paling terperinci untuk menyediakan proxy, dan umumnya tidak sefleksibel melewatkan Configuration yang dapat Anda mutasi untuk memperbarui persyaratan proxy.

Contoh berikut menggunakan ProxyOptions untuk menggunakan Fiddler sebagai proksi:

ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));

HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
    .proxy(proxyOptions)
    .build();

HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
    .proxy(proxyOptions)
    .build();

Langkah selanjutnya

Sekarang setelah Anda terbiasa dengan konfigurasi proksi di Azure SDK for Java, lihat Mengonfigurasi pelacakan di Azure SDK untuk Java untuk lebih memahami alur dalam aplikasi Anda, dan untuk membantu mendiagnosis masalah.