Gebruik ’n HTTP-instaanbediener in Java HttpClient
Gee ’n ProxySelector aan Java se HTTP-kliëntbouer en hou verbindings- en versoektydlimiete apart.
Stel in Java 11 of nuwer ’n ProxySelector op die kliëntbouer. Die instaanbedienereienskappe vir die hele JVM bly dan onaangeraak:
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());
}
}Vervang die dokumentasie-eindpunt met jou HTTP-instaanbediener; die HTTP-instaanbedienerlys gee kandidate om te toets. ProxySelector.of neem ’n sokadres: gebruik die gasheer sonder ’n http://-voorvoegsel en gee die poort afsonderlik. Dit kies ’n HTTP-instaanbediener, nie SOCKS op grond van die poortnommer nie. Die versoek se URI bly die werklike bestemming.
HTTPS kan deur dié HTTP-instaanbediener gaan met ’n tonnel. Die bestemming hoef nie afgegradeer te word nie, en dié opstelling beteken nie dat die instaanbediener se luisterpunt self TLS ondersteun nie.
Die kliëntbouer se verbindingstydlimiet geld wanneer ’n verbinding geskep word; die versoek het sy eie tydlimiet. Hou albei duidelik omdat ’n versoek ’n bestaande verbinding kan hergebruik. ’n Netwerk-, verifikasie- of tonneluitsondering kan voor enige bestemmingsantwoord voorkom, terwyl ’n teruggestuurde foutstatus nie noodwendig ’n uitsondering veroorsaak nie.
Hergebruik die kliënt vir versoeke met dieselfde roeteringsbeleid sodat die toepassing van sy verbindingsbestuur kan baat vind.