Java HttpClient ішінде HTTP прокси қолдану
Java HTTP клиентінің құрастырушысына ProxySelector беріп, қосылым және сұрау уақыт шектерін бөлек ұстаңыз.
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 қолдайтынын білдірмейді.
Клиент құрастырушысындағы қосылым уақыт шегі қосылым орнатқанда қолданылады; сұраудың өз уақыт шегі бар. Екеуін де анық ұстаңыз, өйткені сұрау дайын қосылымды қайта қолдануы мүмкін. Желі, аутентификация не тунель ерекшелігі мақсаттың кез келген жауабынан бұрын болуы мүмкін, ал қайтарылған қате күйі міндетті түрде ерекшелік тудырмайды.
Бір бағыттау саясаты бар сұрауларға клиентті қайта қолданыңыз, сонда қолданба оның қосылым басқаруын пайдаланады.