ใช้ HTTP พร็อกซีใน Java HttpClient
ส่ง ProxySelector ให้ตัวสร้าง HTTP client ของ Java และแยกเวลารอการเชื่อมต่อออกจากเวลารอคำขอ
สำหรับ 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
เวลารอการเชื่อมต่อของตัวสร้างไคลเอนต์ใช้ตอนสร้างการเชื่อมต่อ ส่วนคำขอมีเวลารอของตัวเอง ควรระบุทั้งสองอย่างชัดเจน เพราะคำขออาจใช้การเชื่อมต่อเดิมซ้ำได้ ข้อยกเว้นเครือข่าย การยืนยันตัวตน หรืออุโมงค์อาจเกิดก่อนมีคำตอบใดจากปลายทาง ขณะที่สถานะผิดพลาดที่ส่งกลับมาไม่จำเป็นต้องทำให้เกิดข้อยกเว้น
ใช้ไคลเอนต์ซ้ำสำหรับคำขอที่มีนโยบายเลือกเส้นทางเดียวกัน เพื่อให้แอปใช้ประโยชน์จากการจัดการการเชื่อมต่อของไคลเอนต์