2017-12-21 5 views
1

Ich möchte grundsätzlich HTTP/HTTPS-Anfragen und -Antworten von meinem Computer an eine Remote-URL (im Grunde eine REST-API) auslesen. Ich verstehe, dass es viele Werkzeuge gibt, die mir helfen werden, zu bekommen, was ich will, aber ich muss irgendwie ein Dienstprogramm schreiben, um dies in Java zu tun (wie es von einigen Anwendungen, die wir entwickeln, verwendet wird).Undertow - Einrichtung eines Reverse Proxy zur Überwachung des HTTP/HTTPS-Datenverkehrs an meine REST-API

Was ich tun möchte, ist ein Proxy (oder ein Reverse-Proxy - mein Verständnis der Begriffe ist hier begrenzt), durch die ich alle meine Anfragen an echte APIs route. Dieser Proxy muss den Anforderungshauptteil erfassen (im Falle eines POST oder PUT) und die Anforderung an die echte API weiterleiten, ihre Antwort erfassen und sie an den Client zurücksenden.

Ich stieß auf Undertow, mit dem ich in der Lage war, einen Reverse Proxy mit seinem LoadBalancingProxyClient Proxy-Client zu erstellen und auszuführen. Aber ich habe ein paar Fragen hier.

Angenommen, meine API ist http://myrealapplication.com/rest/operation1, und ich möchte ein JSON an diese API POST.

ich einen Proxy-Server erstellt haben, wie folgt:

 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(); 

Also, wenn ich meine Reverse-Proxy-Server begonnen haben, gibt es zwei Dinge:

  1. Mein Reverse-Proxy ist praktisch eine Art geworden ein Alias ​​für meine echte API, aber wie erfasse ich die Anfrage und die Antwort in dieser Ebene?
  2. Mit der obigen Setup, um für meine Anfrage durch diesen Proxy passieren, muss ich zu http://localhost:8990/rest/operation1 meine URL ändern, die nicht akzeptabel sein kann, als das, was wir erwarten localhost:8990 als Proxy zu tun ist, einzurichten, und behalten Sie meine URL als http://myrealapplication.com/rest/operation1, so dass es zum Endmandanten aussieht, da die Antwort von der tatsächlichen API kommt.

Kann ich Sog verwenden, um dies zu erreichen? Oder gibt es andere Tools, die eine Java-API verfügbar machen, die ich in meinen Programmen verwenden kann?

Bitte helfen!

Danke, Sriram

Antwort

1

Ich denke, dass für das, was Sie suchen eigentlich ein Forward Proxy ist. Hier ist Beispielcode, der Ihnen helfen würde, einen zu erstellen.

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(); 
    } 
} 

Hoffe es hilft! ;)

+1

Danke, aber wie erfasse ich die Anfrage und Antwort? – sriramsridharan