Bagikan melalui


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:

  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 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 Configurationkustom 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 ProxyOptionsyang 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.