অ্যাপাচি HTTP ক্লায়েন্ট (Apache HTTP Client) এ Custom Request/Response Interceptors ব্যবহৃত হয় রিকুয়েস্ট এবং রেসপন্স প্রক্রিয়ার মধ্যে কাস্টম লজিক প্রয়োগ করতে। ইন্টারসেপ্টরগুলি ক্লায়েন্টের রিকুয়েস্ট এবং রেসপন্স প্রক্রিয়াকে কাস্টমাইজ করতে এবং অতিরিক্ত ফিচার যেমন লগিং, কাস্টম হেডার অ্যাড করা, সিকিউরিটি চেক বা প্রোফাইলিং সম্পাদন করতে ব্যবহৃত হয়।
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.RequestConfig;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpRequestBase;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.HttpRequest;
import org.apache.http.HttpEntityEnclosingRequestBase;
import org.apache.http.impl.HttpClientBuilder;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.HttpResponseException;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.impl.client.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class CustomInterceptorExample {
public static void main(String[] args) {
try {
// Request Interceptor তৈরি করা (রিকুয়েস্টে কাস্টম হেডার যোগ করা)
HttpRequestInterceptor requestInterceptor = (request, context) -> {
request.addHeader("X-Custom-Header", "CustomHeaderValue");
System.out.println("Request Interceptor: Added custom header.");
};
// Response Interceptor তৈরি করা (রেসপন্সের স্ট্যাটাস কোড পর্যালোচনা)
HttpResponseInterceptor responseInterceptor = (response, context) -> {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 404) {
System.out.println("Response Interceptor: Resource not found (404).");
}
};
// RequestConfig কনফিগারেশন
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000) // কানেকশন টাইমআউট
.setSocketTimeout(5000) // সোকেট টাইমআউট
.build();
// HttpClient কনফিগারেশন (ইন্টারসেপ্টর সহ)
CloseableHttpClient httpClient = HttpClients.custom()
.addInterceptorFirst(requestInterceptor) // Request Interceptor যোগ করা
.addInterceptorLast(responseInterceptor) // Response Interceptor যোগ করা
.setDefaultRequestConfig(requestConfig) // RequestConfig কনফিগারেশন সেট করা
.build();
// HTTP GET রিকুয়েস্ট তৈরি করা
HttpGet request = new HttpGet("http://example.com");
// রিকুয়েস্ট পাঠানো এবং রেসপন্স গ্রহণ
CloseableHttpResponse response = httpClient.execute(request);
System.out.println("Response Status: " + response.getStatusLine().getStatusCode());
// রেসপন্স কন্টেন্ট
String responseContent = EntityUtils.toString(response.getEntity());
System.out.println("Response Content: " + responseContent);
response.close();
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
addHeader()
মেথড ব্যবহার করে একটি কাস্টম হেডার (X-Custom-Header
) যোগ করে। এটি ইন্টারসেপ্টরের ভিতরে যেকোনো পরিবর্তন বা কার্যকলাপ সম্পাদন করতে সক্ষম করে।addInterceptorFirst()
এবং addInterceptorLast()
: এগুলি HTTP ক্লায়েন্টের জন্য ইন্টারসেপ্টর যোগ করার পদ্ধতি। addInterceptorFirst()
ইন্টারসেপ্টরটি প্রথমে চলবে এবং addInterceptorLast()
ইন্টারসেপ্টরটি রিকুয়েস্ট প্রক্রিয়া শেষে চলবে।setDefaultRequestConfig(requestConfig)
: রিকুয়েস্টের জন্য টাইমআউট কনফিগার করা হয়েছে, যেমন কানেকশন এবং সোকেট টাইমআউট।httpClient.execute(request)
: HTTP GET রিকুয়েস্টটি প্রেরণ করা হয়েছে এবং রেসপন্সের স্ট্যাটাস কোড এবং কন্টেন্ট গ্রহণ করা হয়েছে।Custom Request/Response Interceptors অ্যাপাচি HTTP ক্লায়েন্টে আপনার রিকুয়েস্ট এবং রেসপন্স প্রক্রিয়া কাস্টমাইজ করতে সহায়ক। রিকুয়েস্ট ইন্টারসেপ্টর আপনাকে কাস্টম হেডার বা কন্টেন্ট পরিবর্তন করতে দেয়, এবং রেসপন্স ইন্টারসেপ্টর আপনাকে রেসপন্সের স্ট্যাটাস কোড পর্যালোচনা বা কাস্টম লজিক প্রয়োগ করতে দেয়। এটি উন্নত লগিং, সিকিউরিটি, এবং অন্যান্য ফিচার যোগ করতে একটি শক্তিশালী সরঞ্জাম।