Apache HttpClient - Interceptors
Gli intercettatori sono quelli che aiutano a ostacolare o modificare richieste o risposte. Gli intercettori di protocollo in generale agiscono su un'intestazione specifica o su un gruppo di intestazioni correlate. La libreria HttpClient fornisce il supporto per gli intercettori.
Richiedi intercettore
Il HttpRequestInterceptorl'interfaccia rappresenta gli intercettatori di richiesta. Questa interfaccia contiene un metodo noto come processo in cui è necessario scrivere il blocco di codice per intercettare le richieste.
Sul lato client, questo metodo verifica / elabora le richieste prima di inviarle al server e, sul lato server, questo metodo viene eseguito prima di valutare il corpo della richiesta.
Creazione dell'intercettatore di richieste
È possibile creare un intercettatore di richieste seguendo i passaggi indicati di seguito.
Step 1 - Create an object of HttpRequestInterceptor
Crea un oggetto dell'interfaccia HttpRequestInterceptor implementando il suo processo del metodo astratto.
HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) throws
HttpException, IOException {
//Method implementation . . . . .
};
Step 2 - Instantiate CloseableHttpClient object
Crea un'abitudine CloseableHttpClient oggetto aggiungendo l'interceptor creato sopra come mostrato di seguito -
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(requestInterceptor).build();
Utilizzando questo oggetto, puoi eseguire le esecuzioni delle richieste come al solito.
Esempio
L'esempio seguente mostra l'utilizzo degli intercettatori di richieste. In questo esempio, abbiamo creato un oggetto richiesta HTTP GET e aggiunto tre intestazioni: sample-header, demoheader e test-header ad esso.
Nel processor()metodo dell'interceptor, stiamo verificando gli header della richiesta inviata; se una di queste intestazioni èsample-header, stiamo cercando di rimuoverlo e visualizzare l'elenco delle intestazioni di quella particolare richiesta.
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());
}
}
Produzione
Quando si esegue il programma sopra, viene generato il seguente output:
Contains header sample-header, removing it..
demo-header
test-header
HTTP/1.1 200 OK
Intercettore di risposta
Il HttpResponseInterceptorl'interfaccia rappresenta gli intercettori di risposta. Questa interfaccia contiene un metodo noto comeprocess(). In questo metodo, è necessario scrivere il blocco di codice per intercettare le risposte.
Sul lato server, questo metodo verifica / elabora la risposta prima di inviarli al client e sul lato client, questo metodo viene eseguito prima di valutare il corpo della risposta.
Creazione di intercettatori di risposta
È possibile creare un intercettatore di risposta seguendo i passaggi indicati di seguito:
Step 1 - Create an object of HttpResponseInterceptor
Crea un oggetto di HttpResponseInterceptor interfaccia implementando il suo metodo astratto process.
HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
@Override
public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
//Method implementation . . . . . . . .
}
};
Passaggio 2: creare un'istanza dell'oggetto CloseableHttpClient
Crea un'abitudine CloseableHttpClient oggetto aggiungendo l'interceptor creato sopra, come mostrato di seguito -
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(responseInterceptor).build();
Utilizzando questo oggetto, puoi eseguire le esecuzioni delle richieste come al solito.
Esempio
L'esempio seguente mostra l'utilizzo di intercettori di risposta. In questo esempio, abbiamo aggiunto tre intestazioni: sample-header, demo-header e test-header alla risposta nel processore.
Dopo aver eseguito la richiesta e ottenuto la risposta, abbiamo stampato i nomi di tutte le intestazioni della risposta utilizzando il getAllHeaders() metodo.
E nell'output, puoi osservare i nomi di tre intestazioni nell'elenco.
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());
}
}
}
Produzione
All'esecuzione, il programma precedente genera il seguente risultato:
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