2017-12-21 40 views
1

기본적으로 HTTP/HTTPS 요청 및 응답을 내 컴퓨터에서 원격 URL (기본적으로 REST API)으로 보내고 싶습니다. 나는 내가 원하는 것을 얻는 데 도움이되는 도구가 많이 있다는 것을 이해하지만 Java에서 이것을 수행하는 유틸리티를 작성해야한다. (이것은 우리가 개발중인 일부 응용 프로그램에서 사용하기 때문에).Undertow - REST API에 대한 HTTP/HTTPS 트래픽을 모니터링하는 역방향 프록시 설정 방법

내가 원하는 것은 프록시 (또는 역방향 프록시 - 용어에 대한 나의 이해가 제한되어 있음)를 설정하는 것으로 모든 요청을 실제 API로 라우팅합니다. 이 프록시는 요청 본문 (POST 또는 PUT의 경우)을 캡처하여 실제 API에 요청을 전달하고 응답을 캡처하여 클라이언트에 다시 보내야합니다.

내가 언더우드에 왔는데, 이것을 사용하여 프록시 클라이언트 인 LoadBalancingProxyClient을 사용하여 역방향 프록시를 만들고 실행할 수있었습니다. 하지만 여기에 몇 가지 질문이 있습니다.

내 API가 http://myrealapplication.com/rest/operation1이라고 가정하고 JSON을이 API에 POST하려고합니다. 다음과 같이 내가 프록시 서버를 만든

:

  1. 내 리버스 프록시는 실질적으로 일종의되었다 : 그래서 내 역방향 프록시 서버를 시작한 후

     LoadBalancingProxyClient loadBalancer = new LoadBalancingProxyClient(); 
         loadBalancer.addHost(new URI("http://myrealapplication.com")); 
         loadBalancer.setConnectionsPerThread(20); 
    
         Undertow reverseProxy = Undertow.builder() 
           .addHttpListener(8990, "localhost") 
           .setIoThreads(4) 
           .setHandler(Handlers.requestDump(new ProxyHandler(loadBalancer, 3000, null))) 
           .build(); 
         reverseProxy.start(); 
    

    , 두 가지가있다 내 실제 API의 별칭이지만이 계층에서 요청과 응답을 어떻게 캡처합니까?

  2. 위의 설정을 통해 요청한이 프록시를 통과하려면 내 URL을 http://localhost:8990/rest/operation1으로 변경해야합니다. 허용되지 않을 수 있습니다. 우리가 기대하는 것은 을 프록시로 설정하는 것입니다.을 입력하고 내 URL을 http://myrealapplication.com/rest/operation1으로 유지하여 실제 API에서 응답이 나오면 최종 클라이언트를 찾습니다.

이것을 달성하려면 어떻게해야합니까? 아니면 내 프로그램에서 사용할 수있는 Java API를 폭로하는 다른 도구가 있습니까?

도와주세요!

덕분에, 스리 람

답변

1

나는 당신이 실제로 찾고있는 것은 Forward Proxy라고 생각합니다. 다음은 예제 코드를 작성하는 데 도움이되는 샘플 코드입니다.

public class ForwardProxyWithUndertow { 

    public static void main(String[] args) { 
    final HttpHandler forwardProxyHandler = new ConnectHandler(ForwardProxyWithUndertow::handleNotFound); 

    Undertow.builder() 
     .addHttpListener(8080, "localhost") 
     .setHandler(forwardProxyHandler) 
     .build() 
     .start(); 
    } 

    static void handleNotFound(HttpServerExchange e){ 
    e.setStatusCode(404); 
    e.endExchange(); 
    } 
} 

희망 하시겠습니까? ;)

+1

감사합니다. 그러나 요청과 응답을 어떻게 캡처합니까? – sriramsridharan