Mengonfigurasi proksi di Azure SDK for Java
Artikel ini memberikan gambaran umum tentang cara mengonfigurasi Azure SDK untuk Java untuk memanfaatkan proksi dengan benar.
Konfigurasi proksi HTTP
Pustaka klien Azure untuk Java menawarkan beberapa cara untuk mengonfigurasi proksi untuk HttpClient
.
Setiap metode penyediaan proksi memiliki pro dan kontra sendiri dan memberikan tingkat enkapsulasi yang berbeda. Ketika Anda telah mengonfigurasi proksi untuk sebuah HttpClient
, akan menggunakan proksi selama sisa masa pakainya. Memiliki proksi yang terkait dengan HttpClient
individu memungkinkan aplikasi untuk menggunakan beberapa instans HttpClient
di mana masing-masing dapat menggunakan proksi yang berbeda untuk memenuhi persyaratan proksi aplikasi.
Opsi konfigurasi yang tersedia adalah:
Menggunakan proksi lingkungan
Secara default, pembangun klien HTTP akan memeriksa lingkungan untuk konfigurasi proksi. Proses ini memanfaatkan APIConfiguration
Azure SDK for Java. Saat pembangun membuat klien, pembangun dikonfigurasi dengan salinan 'konfigurasi global' yang diambil dengan memanggil Configuration.getGlobalConfiguration()
. Panggilan ini akan dibaca dalam konfigurasi proksi HTTP apa pun dari lingkungan sistem.
Ketika pembangun memeriksa lingkungan, ia akan mencari konfigurasi lingkungan berikut dalam urutan yang ditentukan:
HTTPS_PROXY
HTTP_PROXY
https.proxy*
http.proxy*
*
mewakili properti proksi Java yang terkenal. Untuk informasi selengkapnya, lihat Jaringan dan Proksi Java dalam dokumentasi Oracle.
Jika pembangun menemukan salah satu konfigurasi lingkungan, pembangun akan membuat instans ProxyOptions
dengan memanggil ProxyOptions.fromConfiguration(Configuration.getGlobalConfiguration())
. Artikel ini memberikan rincian lebih lanjut di bawah ini tentang jenis ProxyOptions
.
Penting
Untuk menggunakan konfigurasi proksi apa pun, Java mengharuskan Anda mengatur properti lingkungan sistem java.net.useSystemProxies
ke true
.
Anda juga dapat membuat instans klien HTTP yang tidak menggunakan konfigurasi proksi apa pun yang ada di variabel lingkungan sistem. Untuk mengganti perilaku default, Anda secara eksplisit mengatur Configuration
yang dikonfigurasi secara berbeda pada pembuat klien HTTP. Ketika Anda mengatur Configuration
di pembangun, pembangun tidak akan lagi memanggil Configuration.getGlobalConfiguration()
. Misalnya, jika Anda memanggil configuration(Configuration)
menggunakan Configuration.NONE
, Anda dapat secara eksplisit mencegah pembangun dari memeriksa lingkungan untuk konfigurasi.
Contoh berikut menggunakan variabel lingkungan HTTP_PROXY
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 dan alur HTTP.)
export HTTP_PROXY=localhost:8888
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder().build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder().build();
Untuk mencegah proksi lingkungan digunakan, konfigurasikan pembangun klien HTTP dengan Configuration.NONE
, seperti yang ditunjukkan pada contoh berikut:
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
Menggunakan proksi Konfigurasi
Daripada membaca dari lingkungan, Anda dapat mengonfigurasi pembangun klien HTTP untuk menggunakan Configuration
kustom dengan pengaturan proksi yang sama yang sudah diterima dari lingkungan. Konfigurasi ini menawarkan kemampuan untuk memiliki konfigurasi yang dapat digunakan kembali yang dicakup ke kasus penggunaan terbatas. Ketika pembangun klien HTTP sedang membangun HttpClient
, pembangun akan menggunakan ProxyOptions
yang dikembalikan dari ProxyOptions.fromConfiguration(<Configuration passed into the builder>)
.
Contoh berikut menggunakan http.proxy*
konfigurasi yang ditetapkan dalam objek Configuration
untuk menggunakan proksi yang mengautentikasi Fiddler sebagai proksi.
Configuration configuration = new Configuration()
.put("java.net.useSystemProxies", "true")
.put("http.proxyHost", "localhost")
.put("http.proxyPort", "8888")
.put("http.proxyUser", "1")
.put("http.proxyPassword", "1");
HttpClient nettyHttpClient = new NettyAsyncHttpClientBuilder()
.configuration(configuration)
.build();
HttpClient okhttpHttpClient = new OkHttpAsyncHttpClientBuilder()
.configuration(configuration)
.build();
Menggunakan proksi eksplisit
Pustaka klien Java mengirim dengan kelas ProxyOptions
yang bertindak sebagai jenis pustaka klien Azure untuk mengonfigurasi suatu 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 instans ProxyOptions
sederhana yang diminta proksi ke alamat Fiddler default (localhost:8888
):
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("localhost", 8888));
Contoh berikut membuat ProxyOptions
terautentikasi yang diminta proksi 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 mengonfigurasi pembangun klien HTTP dengan ProxyOptions
secara langsung untuk menunjukkan proksi eksplisit yang akan digunakan. Konfigurasi ini adalah cara paling terperinci untuk menyediakan proksi, dan umumnya tidak sefleksibel melewati Configuration
yang dapat Anda mutasi untuk memperbarui persyaratan proksi.
Contoh berikut menggunakan ProxyOptions
untuk memanfaatkan 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 berikutnya
Sekarang setelah Anda sudah memahami konfigurasi proksi di Azure SDK for Java, lihat Mengonfigurasi penelusuran di Azure SDK for Java untuk lebih memahami alur dalam aplikasi Anda, dan untuk membantu mendiagnosis masalah.