Java HttpClient-এ HTTP প্রক্সি ব্যবহার করুন
Java-র HTTP ক্লায়েন্ট বিল্ডারে ProxySelector দিন এবং সংযোগ ও অনুরোধের টাইমআউট আলাদা রাখুন।
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 সমর্থন করে, তা বোঝায় না।
ক্লায়েন্ট বিল্ডারের সংযোগ টাইমআউট সংযোগ তৈরির সময় প্রযোজ্য; অনুরোধের নিজস্ব টাইমআউট আছে। দুটোই স্পষ্ট রাখুন, কারণ অনুরোধ বিদ্যমান সংযোগ পুনর্ব্যবহার করতে পারে। গন্তব্যের কোনো উত্তর আসার আগেই নেটওয়ার্ক, প্রমাণীকরণ বা টানেলের এক্সসেপশন ঘটতে পারে, আর ফেরত পাওয়া ত্রুটি স্ট্যাটাস থেকে এক্সসেপশন হতেই হবে এমন নয়।
একই রাউটিং নীতির অনুরোধে ক্লায়েন্ট পুনর্ব্যবহার করুন, যাতে অ্যাপ তার সংযোগ ব্যবস্থাপনা থেকে সুবিধা পায়।