Выкарыстанне 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 самім слухачом проксі.
Тайм-аўт злучэння ў будаўніку дзейнічае пры ўсталяванні злучэння; у запыту ёсць уласны тайм-аўт. Няхай абодва будуць яўнымі, бо запыт можа паўторна выкарыстаць гатовае злучэнне. Выключэнне сеткі, аўтэнтыфікацыі або тунэля можа ўзнікнуць да любога адказу прызначэння, а вернуты статус памылкі не абавязкова выклікае выключэнне.
Паўторна выкарыстоўвайце кліент для запытаў з адной палітыкай маршрутызацыі, каб праграма карысталася яго кіраваннем злучэннямі.