في 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 على مستمع البروكسي نفسه.

تُطبق مهلة الاتصال في منشئ العميل عند إنشاء اتصال؛ وللطلب مهلته الخاصة. اجعل الاثنين واضحين لأن الطلب قد يعيد استخدام اتصال موجود. قد يقع استثناء شبكة أو مصادقة أو نفق قبل أي استجابة من الوجهة، بينما لا يستلزم رمز خطأ معاد رمي استثناء.

أعد استخدام العميل للطلبات ذات سياسة التوجيه نفسها كي يستفيد التطبيق من إدارته للاتصالات.

مقالات ذات صلة