HTTP-proxy használata Java HttpClientben
Adjon ProxySelectort a Java HTTP-kliensépítőjének, és tartsa külön a kapcsolat és a kérés időkorlátját.
Java 11-ben vagy újabb verzióban állítson be ProxySelector objektumot a kliensépítőn. A teljes JVM proxybeállításai így érintetlenek maradnak:
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());
}
}Cserélje a dokumentációs végpontot a saját HTTP-proxyjára; a HTTP-proxylista tesztelhető jelölteket kínál. A ProxySelector.of socketcímet fogad: használja a gépnevet http:// előtag nélkül, és a portot külön adja meg. HTTP-proxyt választ, nem SOCKS-ot a portszám alapján. A kérés URI-ja a valódi cél marad.
A HTTPS ezen a HTTP-proxyn alagúton haladhat át. Nem kell gyengíteni a cél biztonságát, és a beállítás nem jelenti, hogy maga a proxy figyelőpontja TLS-t támogat.
A kliensépítő kapcsolati időkorlátja kapcsolat létesítésekor érvényesül; a kérésnek saját időkorlátja van. Mindkettő legyen látható, mert a kérés meglévő kapcsolatot is újrahasználhat. Hálózati, hitelesítési vagy alagútkivétel bármilyen célválasz előtt bekövetkezhet, míg a visszaadott hibastátusz nem feltétlenül okoz kivételt.
Azonos útválasztási házirendű kérésekhez használja újra a klienst, hogy az alkalmazás kihasználhassa annak kapcsolatkezelését.