สำหรับ 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

เวลารอการเชื่อมต่อของตัวสร้างไคลเอนต์ใช้ตอนสร้างการเชื่อมต่อ ส่วนคำขอมีเวลารอของตัวเอง ควรระบุทั้งสองอย่างชัดเจน เพราะคำขออาจใช้การเชื่อมต่อเดิมซ้ำได้ ข้อยกเว้นเครือข่าย การยืนยันตัวตน หรืออุโมงค์อาจเกิดก่อนมีคำตอบใดจากปลายทาง ขณะที่สถานะผิดพลาดที่ส่งกลับมาไม่จำเป็นต้องทำให้เกิดข้อยกเว้น

ใช้ไคลเอนต์ซ้ำสำหรับคำขอที่มีนโยบายเลือกเส้นทางเดียวกัน เพื่อให้แอปใช้ประโยชน์จากการจัดการการเชื่อมต่อของไคลเอนต์

บทความที่เกี่ยวข้อง