Apache HttpClient - Interceptory

Interceptory to te, które pomagają blokować lub zmieniać żądania lub odpowiedzi. Ogólnie rzecz biorąc, przechwytywacze protokołów działają na określonym nagłówku lub grupie powiązanych nagłówków. Biblioteka HttpClient zapewnia obsługę przechwytywaczy.

Poproś o przechwytywacz

Plik HttpRequestInterceptorinterfejs reprezentuje przechwytywacze żądań. Ten interfejs zawiera metodę znaną jako proces, w którym musisz napisać fragment kodu, aby przechwycić żądania.

Po stronie klienta metoda ta weryfikuje / przetwarza żądania przed wysłaniem ich do serwera, a po stronie serwera metoda ta jest wykonywana przed oceną treści żądania.

Tworzenie przechwytywacza żądań

Możesz utworzyć przechwytywacz żądań, wykonując kroki podane poniżej.

Step 1 - Create an object of HttpRequestInterceptor

Utwórz obiekt interfejsu HttpRequestInterceptor, implementując jego proces metody abstrakcyjnej.

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

Step 2 - Instantiate CloseableHttpClient object

Zbuduj niestandardowy CloseableHttpClient obiekt, dodając do niego powyższy utworzony przechwytywacz, jak pokazano poniżej -

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

Korzystając z tego obiektu, możesz normalnie wykonywać żądania.

Przykład

Poniższy przykład demonstruje użycie przechwytywaczy żądań. W tym przykładzie utworzyliśmy obiekt żądania HTTP GET i dodaliśmy do niego trzy nagłówki: nagłówek próbki, nagłówek demo i nagłówek testowy.

w processor()metoda przechwytywacza, weryfikujemy nagłówki wysłanego żądania; jeśli którykolwiek z tych nagłówków jestsample-header, próbujemy go usunąć i wyświetlić listę nagłówków tego konkretnego żądania.

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());
   }
}

Wynik

Podczas wykonywania powyższego programu generowane są następujące dane wyjściowe -

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

Interceptor odpowiedzi

Plik HttpResponseInterceptorinterfejs reprezentuje przechwytywacze odpowiedzi. Ten interfejs zawiera metodę znaną jakoprocess(). W tej metodzie musisz napisać fragment kodu, aby przechwycić odpowiedzi.

Po stronie serwera metoda ta weryfikuje / przetwarza odpowiedzi przed wysłaniem ich do klienta, a po stronie klienta ta metoda jest wykonywana przed oceną treści odpowiedzi.

Tworzenie przechwytywacza odpowiedzi

Możesz utworzyć przechwytywacz odpowiedzi, wykonując kroki podane poniżej -

Step 1 - Create an object of HttpResponseInterceptor

Utwórz obiekt HttpResponseInterceptor interfejs poprzez implementację jego metody abstrakcyjnej process.

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

Krok 2: Utwórz wystąpienie obiektu CloseableHttpClient

Zbuduj niestandardowy CloseableHttpClient obiekt poprzez dodanie do niego powyższego utworzonego przechwytywacza, jak pokazano poniżej -

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

Korzystając z tego obiektu, możesz normalnie wykonywać żądania.

Przykład

Poniższy przykład ilustruje użycie przechwytywaczy odpowiedzi. W tym przykładzie dodaliśmy trzy nagłówki: nagłówek próbki, nagłówek demo i nagłówek testu do odpowiedzi w procesorze.

Po wykonaniu żądania i uzyskaniu odpowiedzi wydrukowaliśmy nazwy wszystkich nagłówków odpowiedzi przy użyciu rozszerzenia getAllHeaders() metoda.

W danych wyjściowych możesz zobaczyć nazwy trzech nagłówków na liście.

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());
      }
   }
}

Wynik

Podczas wykonywania powyższy program generuje następujący wynik -

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