Apache 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 개체 인스턴스화
맞춤 제작 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