Apache HttpClient - Durdurucular
Önleyiciler, istekleri veya yanıtları engellemeye veya değiştirmeye yardımcı olanlardır. Protokol engelleyicileri genel olarak belirli bir başlık veya ilgili bir grup başlık üzerinde hareket eder. HttpClient kitaplığı, engelleyiciler için destek sağlar.
Önleyen isteyin
HttpRequestInterceptorarabirim, istek önleyicilerini temsil eder. Bu arabirim, istekleri engellemek için kod yığınını yazmanız gereken işlem olarak bilinen bir yöntem içerir.
İstemci tarafında, bu yöntem istekleri sunucuya göndermeden önce doğrular / işler ve sunucu tarafında bu yöntem, isteğin gövdesini değerlendirmeden önce yürütülür.
İstek önleyicisi oluşturma
Aşağıda verilen adımları izleyerek bir istek durdurucu oluşturabilirsiniz.
Step 1 - Create an object of HttpRequestInterceptor
Soyut yöntem sürecini uygulayarak HttpRequestInterceptor arabiriminin bir nesnesini oluşturun.
HttpRequestInterceptor requestInterceptor = new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) throws
HttpException, IOException {
//Method implementation . . . . .
};
Step 2 - Instantiate CloseableHttpClient object
Bir özel oluşturun CloseableHttpClient aşağıda gösterildiği gibi yukarıda oluşturulan durdurucu ekleyerek nesneyi -
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(requestInterceptor).build();
Bu nesneyi kullanarak, isteği yürütme işlemlerini her zamanki gibi gerçekleştirebilirsiniz.
Misal
Aşağıdaki örnek, istek yakalayıcılarının kullanımını göstermektedir. Bu örnekte, bir HTTP GET istek nesnesi oluşturduk ve buna üç başlık ekledik: sample-header, demoheader ve test-header.
İçinde processor()durduranın yöntemi, gönderilen talebin başlıklarını doğruluyoruz; bu başlıklardan herhangi biri isesample-header, onu kaldırmaya ve söz konusu isteğin başlıklarının listesini görüntülemeye çalışıyoruz.
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());
}
}
Çıktı
Yukarıdaki programı çalıştırırken aşağıdaki çıktı üretilir -
Contains header sample-header, removing it..
demo-header
test-header
HTTP/1.1 200 OK
Müdahale engelleyici
HttpResponseInterceptorarabirim, yanıt engelleyicileri temsil eder. Bu arayüz olarak bilinen bir yöntem içerirprocess(). Bu yöntemde, yanıtları kesmek için kod yığınını yazmanız gerekir.
Sunucu tarafında, bu yöntem yanıtı istemciye göndermeden önce doğrular / işler ve istemci tarafında bu yöntem yanıtın gövdesini değerlendirmeden önce yürütülür.
Yanıt engelleyici oluşturma
Aşağıda verilen adımları izleyerek bir yanıt yakalayıcı oluşturabilirsiniz -
Step 1 - Create an object of HttpResponseInterceptor
Bir nesneyi oluşturun HttpResponseInterceptor soyut yöntemini uygulayarak arayüz process.
HttpResponseInterceptor responseInterceptor = new HttpResponseInterceptor() {
@Override
public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {
//Method implementation . . . . . . . .
}
};
Adım 2: CloseableHttpClient nesnesinin örneğini oluşturun
Bir özel oluşturun CloseableHttpClient aşağıda gösterildiği gibi, yukarıda oluşturulan durdurucu ekleyerek nesneyi -
//Creating a CloseableHttpClient object
CloseableHttpClient httpclient =
HttpClients.custom().addInterceptorFirst(responseInterceptor).build();
Bu nesneyi kullanarak, isteği yürütme işlemlerini her zamanki gibi gerçekleştirebilirsiniz.
Misal
Aşağıdaki örnek, yanıt kesicilerinin kullanımını gösterir. Bu örnekte, işlemcideki yanıta üç başlık ekledik: örnek başlık, demo başlık ve test başlığı.
Talebi yerine getirip yanıtı aldıktan sonra, yanıtın tüm başlıklarının adlarını getAllHeaders() yöntem.
Ve çıktıda, listedeki üç başlığın adını görebilirsiniz.
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());
}
}
}
Çıktı
Yürütüldüğünde, yukarıdaki program aşağıdaki sonucu verir -
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