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