Використання HTTP-проксі в Java HttpClient
Передайте ProxySelector у будівник HTTP-клієнта Java та розділяйте тайм-аути з’єднання й запиту.
У Java 11 і новіших задайте ProxySelector у будівнику клієнта. Властивості проксі для всієї JVM залишаться незмінними:
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());
}
}Замініть документаційну точку власним HTTP-проксі; список HTTP-проксі дає кандидатів для перевірки. ProxySelector.of приймає адресу сокета: використовуйте хост без префікса http:// і передавайте порт окремо. Він вибирає HTTP-проксі, а не SOCKS за номером порту. URI запиту залишається справжнім призначенням.
HTTPS може проходити через цей HTTP-проксі тунелем. Знижувати захист призначення не потрібно, а налаштування не означає підтримки TLS самим слухачем проксі.
Тайм-аут з’єднання в будівнику діє під час установлення з’єднання; запит має власний тайм-аут. Тримайте обидва явними, бо запит може повторно використати готове з’єднання. Виняток мережі, автентифікації або тунелю може виникнути до будь-якої відповіді призначення, тоді як повернутий статус помилки не обов’язково спричиняє виняток.
Повторно використовуйте клієнт для запитів з однаковою політикою маршрутизації, щоб застосунок отримував користь від його керування з’єднаннями.