Folosește un proxy HTTP în Java HttpClient
Trimite un ProxySelector constructorului clientului HTTP din Java și separă timeoutul de conexiune de cel al cererii.
În Java 11 sau mai nou, setează un ProxySelector în constructorul clientului. Proprietățile proxy pentru întreaga JVM rămân astfel neschimbate:
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());
}
}Înlocuiește endpointul de documentație cu proxy-ul tău HTTP; lista de proxy-uri HTTP oferă candidați de testat. ProxySelector.of primește o adresă de socket: folosește gazda fără prefixul http:// și furnizează portul separat. Selectează un proxy HTTP, nu SOCKS pe baza numărului portului. URI-ul cererii rămâne destinația reală.
HTTPS poate trece prin acest proxy HTTP folosind un tunel. Nu trebuie redusă securitatea destinației, iar configurarea nu implică suport TLS pe punctul de ascultare al proxy-ului.
Timeoutul de conexiune al constructorului se aplică la stabilirea conexiunii; cererea are propriul timeout. Păstrează-le pe ambele explicite, deoarece o cerere poate reutiliza o conexiune existentă. O excepție de rețea, autentificare sau tunel poate apărea înaintea oricărui răspuns al destinației, în timp ce un status de eroare returnat nu trebuie să producă o excepție.
Reutilizează clientul pentru cereri cu aceeași politică de rutare, astfel încât aplicația să beneficieze de gestionarea conexiunilor.