अपाचे HttpClient - इंटरसेप्टर्स

अवरोधक वे हैं जो अनुरोधों या प्रतिक्रियाओं को बाधित करने या बदलने में मदद करते हैं। प्रोटोकॉल इंटरसेप्टर एक विशिष्ट हेडर या संबंधित हेडर के एक समूह पर सामान्य कार्य करते हैं। HttpClient लाइब्रेरी इंटरसेप्टर्स के लिए सहायता प्रदान करती है।

इंटरसेप्टर का अनुरोध करें

HttpRequestInterceptorइंटरफ़ेस अनुरोध अवरोधकों का प्रतिनिधित्व करता है। इस इंटरफ़ेस में एक विधि है जिसे एक प्रक्रिया के रूप में जाना जाता है जिसमें आपको अनुरोधों को रोकने के लिए कोड ऑफ चंक लिखना होगा।

क्लाइंट की ओर से, यह विधि सर्वर पर भेजने से पहले अनुरोधों को सत्यापित / संसाधित करती है और सर्वर साइड पर, अनुरोध के मुख्य भाग का मूल्यांकन करने से पहले इस पद्धति को निष्पादित किया जाता है।

अनुरोध अवरोधक बनाना

आप नीचे दिए गए चरणों का पालन करके एक अनुरोध इंटरसेप्टर बना सकते हैं।

Step 1 - Create an object of HttpRequestInterceptor

अपनी अमूर्त विधि प्रक्रिया को लागू करके HttpRequestInterceptor इंटरफ़ेस की एक वस्तु बनाएँ।

HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
@Override
 public void process(HttpRequest request, HttpContext context) throws
HttpException, IOException {
   //Method implementation . . . . .
};

Step 2 - Instantiate CloseableHttpClient object

एक प्रथा का निर्माण करें CloseableHttpClient उपरोक्त बनाये गये इंटरसेप्टर को जोड़कर वस्तु को नीचे दिखाया गया है -

//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(requestInterceptor).build();

इस ऑब्जेक्ट का उपयोग करके, आप हमेशा की तरह अनुरोध निष्पादित कर सकते हैं।

उदाहरण

निम्नलिखित उदाहरण अनुरोध अवरोधकों के उपयोग को दर्शाता है। इस उदाहरण में, हमने एक HTTP GET अनुरोध ऑब्जेक्ट बनाया है और इसमें तीन हेडर जोड़े हैं: नमूना-हेडर, डेमोहेडर और टेस्ट-हेडर।

में processor()इंटरसेप्टर की विधि, हम भेजे गए अनुरोध के हेडर की पुष्टि कर रहे हैं; अगर उन हेडर में से कोई हैsample-header, हम इसे हटाने और उस विशेष अनुरोध के हेडर की सूची प्रदर्शित करने का प्रयास कर रहे हैं।

import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HttpContext;

public class InterceptorsExample {
 
   public static void main(String args[]) throws Exception{
      
      //Creating an HttpRequestInterceptor
      HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
         @Override
         public void process(HttpRequest request, HttpContext context) throws
         HttpException, IOException {
            if(request.containsHeader("sample-header")) {
               System.out.println("Contains header sample-header, removing it..");
               request.removeHeaders("sample-header"); 
            }
            //Printing remaining list of headers
            Header[] headers= request.getAllHeaders();
            for (int i = 0; i<headers.length;i++) {
               System.out.println(headers[i].getName());
            }
         }
      };

      //Creating a CloseableHttpClient object
      CloseableHttpClient httpclient =
      HttpClients.custom().addInterceptorFirst(requestInterceptor).build();

      //Creating a request object
      HttpGet httpget1 = new HttpGet("https://www.tutorialspoint.com/");

      //Setting the header to it
      httpget1.setHeader(new BasicHeader("sample-header","My first header"));
      httpget1.setHeader(new BasicHeader("demo-header","My second header"));
      httpget1.setHeader(new BasicHeader("test-header","My third header"));

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(httpget1);

      //Printing the status line
      System.out.println(httpresponse.getStatusLine());
   }
}

उत्पादन

उपरोक्त कार्यक्रम निष्पादित करने पर, निम्न आउटपुट उत्पन्न होता है -

Contains header sample-header, removing it..
demo-header
test-header
HTTP/1.1 200 OK

प्रतिक्रिया अवरोधक

HttpResponseInterceptorइंटरफ़ेस प्रतिक्रिया इंटरसेप्टर का प्रतिनिधित्व करता है। इस इंटरफ़ेस में एक विधि के रूप में जाना जाता हैprocess()। इस विधि में, आपको प्रतिक्रियाओं को इंटरसेप्ट करने के लिए कोड ऑफ चंक लिखना होगा।

सर्वर की ओर से, यह विधि क्लाइंट को भेजने से पहले प्रतिक्रिया की पुष्टि / प्रक्रिया करती है, और क्लाइंट की ओर से, प्रतिक्रिया के शरीर का मूल्यांकन करने से पहले इस पद्धति को निष्पादित किया जाता है।

प्रतिक्रिया अवरोधक बनाना

आप नीचे दिए गए चरणों का पालन करके एक प्रतिक्रिया इंटरसेप्टर बना सकते हैं -

Step 1 - Create an object of HttpResponseInterceptor

की एक वस्तु बनाएँ HttpResponseInterceptor इसकी अमूर्त विधि को लागू करके इंटरफ़ेस process

HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
   @Override
   public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
      //Method implementation . . . . . . . .
   }
};

चरण 2: तात्कालिक क्लोजिएबलहॉटप्लिएंट ऑब्जेक्ट

एक प्रथा का निर्माण करें CloseableHttpClient ऊपर बनाया गया इंटरसेप्टर जोड़कर वस्तु, जैसा कि नीचे दिखाया गया है -

//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(responseInterceptor).build();

इस ऑब्जेक्ट का उपयोग करके, आप हमेशा की तरह अनुरोध निष्पादित कर सकते हैं।

उदाहरण

निम्न उदाहरण प्रतिक्रिया अवरोधकों के उपयोग को प्रदर्शित करता है। इस उदाहरण में, हमने तीन हेडर जोड़े हैं: प्रोसेसर में प्रतिक्रिया के लिए नमूना-हेडर, डेमो-हेडर और टेस्ट-हेडर।

अनुरोध को निष्पादित करने और प्रतिक्रिया प्राप्त करने के बाद, हमने उपयोग करते हुए प्रतिक्रिया के सभी हेडर के नाम मुद्रित किए getAllHeaders() तरीका।

और आउटपुट में, आप सूची में तीन हेडर के नाम देख सकते हैं।

import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseInterceptor;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.protocol.HttpContext;

public class ResponseInterceptorsExample {

   public static void main(String args[]) throws Exception{
      
      //Creating an HttpRequestInterceptor
      HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
         @Override
         public void process(HttpResponse response, HttpContext context) throws
         HttpException, IOException {
            System.out.println("Adding header sample_header, demo-header, test_header to the response");
            response.setHeader("sample-header", "My first header");
            response.setHeader("demo-header", "My second header");
            response.setHeader("test-header", "My third header"); 
         }
      };

      //Creating a CloseableHttpClient object
      CloseableHttpClient httpclient = HttpClients.custom().addInterceptorFirst(responseInterceptor).build();

      //Creating a request object
      HttpGet httpget1 = new HttpGet("https://www.tutorialspoint.com/");

      //Executing the request
      HttpResponse httpresponse = httpclient.execute(httpget1); 

      //Printing remaining list of headers
      Header[] headers = httpresponse.getAllHeaders();
 
      for (int i = 0; i<headers.length;i++) {
         System.out.println(headers[i].getName());
      }
   }
}

उत्पादन

निष्पादित करने पर, उपरोक्त कार्यक्रम निम्नलिखित परिणाम उत्पन्न करता है -

On executing the above program generates the following output.
Adding header sample_header, demo-header, test_header to the response
Accept-Ranges
Access-Control-Allow-Headers
Access-Control-Allow-Origin
Cache-Control
Content-Type
Date
Expires
Last-Modified
Server
Vary
X-Cache
sample-header
demo-header
test-header