Използване на 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.
Времето за изчакване на връзката в конструктора важи при установяване на връзка; заявката има собствено време за изчакване. Дръжте и двете явни, защото заявката може да използва съществуваща връзка повторно. Мрежово, удостоверително или тунелно изключение може да настъпи преди отговор от целта, докато върнат статус за грешка не е задължително да предизвика изключение.
Използвайте клиента повторно за заявки с еднаква политика на маршрутизиране, за да се възползва приложението от управлението му на връзките.