Χρήση HTTP proxy στο Java HttpClient
Περάστε ένα ProxySelector στον κατασκευαστή του HTTP client της Java και ξεχωρίστε τα χρονικά όρια σύνδεσης και αιτήματος.
Σε Java 11 ή νεότερη, ορίστε ένα ProxySelector στον κατασκευαστή του client. Έτσι οι ιδιότητες proxy για ολόκληρη τη 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 proxy· η λίστα HTTP proxy προσφέρει υποψηφίους για δοκιμή. Το ProxySelector.of δέχεται διεύθυνση socket: χρησιμοποιήστε τον υπολογιστή χωρίς πρόθεμα http:// και δώστε τη θύρα χωριστά. Επιλέγει HTTP proxy, όχι SOCKS βάσει του αριθμού θύρας. Το URI αιτήματος παραμένει ο πραγματικός προορισμός.
Το HTTPS μπορεί να περάσει από αυτό το HTTP proxy μέσα από σήραγγα. Δεν χρειάζεται υποβάθμιση της προστασίας του προορισμού και η ρύθμιση δεν σημαίνει ότι ο ίδιος ο ακροατής του proxy υποστηρίζει TLS.
Το χρονικό όριο σύνδεσης του κατασκευαστή εφαρμόζεται κατά τη δημιουργία σύνδεσης· το αίτημα έχει δικό του όριο. Κρατήστε και τα δύο σαφή, επειδή ένα αίτημα μπορεί να επαναχρησιμοποιήσει υπάρχουσα σύνδεση. Εξαίρεση δικτύου, ταυτοποίησης ή σήραγγας μπορεί να προηγηθεί οποιασδήποτε απόκρισης προορισμού, ενώ μια επιστρεφόμενη κατάσταση σφάλματος δεν προκαλεί απαραίτητα εξαίρεση.
Επαναχρησιμοποιήστε τον client για αιτήματα με την ίδια πολιτική δρομολόγησης, ώστε η εφαρμογή να ωφελείται από τη διαχείριση συνδέσεών του.