Java HttpClient’da HTTP proksi ishlatish
Java HTTP mijoz quruvchisiga ProxySelector bering va ulanish hamda so‘rov vaqt chegaralarini alohida tuting.
Java 11 yoki undan yangi versiyada mijoz quruvchisiga ProxySelector o‘rnating. Butun JVM uchun proksi xususiyatlari o‘zgarmaydi:
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class ProxyExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/"))
.timeout(Duration.ofSeconds(15))
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}Hujjatdagi nuqtani o‘z HTTP proksingiz bilan almashtiring; HTTP proksilar ro‘yxati sinashga nomzodlar beradi. ProxySelector.of soket manzilini oladi: hostni http:// prefiksisiz ishlating va portni alohida bering. U HTTP proksi tanlaydi, port raqamiga qarab SOCKS emas. So‘rov URI’si haqiqiy manzil bo‘lib qoladi.
HTTPS bu HTTP proksi orqali tunnel yordamida o‘tishi mumkin. Boriladigan joy xavfsizligini pasaytirish shart emas va sozlash proksi tinglovchisining o‘zi TLS qo‘llashini anglatmaydi.
Mijoz quruvchisining ulanish vaqti chegarasi ulanish yaratilganda amal qiladi; so‘rovning o‘z vaqt chegarasi bor. Ikkalasini ham ochiq tuting, chunki so‘rov mavjud ulanishni qayta ishlatishi mumkin. Tarmoq, autentifikatsiya yoki tunnel istisnosi boriladigan joyning har qanday javobidan oldin chiqishi mumkin, qaytgan xato holati esa istisno chiqarishi shart emas.
Bir xil marshrut siyosatidagi so‘rovlar uchun mijozni qayta ishlating, shunda ilova uning ulanish boshqaruvidan foyda ko‘radi.