Пересылка Java HTTP-запросов через другой сервер - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два экземпляра AWS I1 и I2 с IP-адресами как ip1 и ip2 соответственно. Чего я хочу добиться:

  • Я хочу получить URL-адрес от I1 (используя java httpclient) и хочу, чтобы этот запрос проходил через экземпляр I2, т. Е. Во внешний мир должно показаться, что запрос поступает из экземпляра I2.

Например:

Я выполняю указанный ниже код из экземпляра I1:

class Test {

    public static void main(String[] args) {

String url = "https://api.ipify.org?format=json",
       proxy = "ip2";
       Proxy p = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy, 80));
 URL server = new URL(url);
Properties systemProperties = System.getProperties();
HttpURLConnection connection = (HttpURLConnection)server.openConnection(p);
connection.connect();
String theString = IOUtils.toString(connection.getInputStream(), StandardCharsets.UTF_8);
 System.out.println(theString);
}
}

Выходные данные должны быть публичными Ip экземпляра I2 . Но это исключение:

Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
        at sun.net.www.http.HttpClient$1.run(HttpClient.java:515)
        at sun.net.www.http.HttpClient$1.run(HttpClient.java:513)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.net.www.http.HttpClient.privilegedOpenServer(HttpClient.java:512)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:553)
        at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
        at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1199)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:162)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl$connect.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
        at com.exp.Test.main(Test.java:24)

Я гуглил в вышеупомянутом случае использования, но не смог ничего найти. Любая помощь ценится.

1 Ответ

0 голосов
/ 03 сентября 2018

Эта проблема исправлена. Установлен сервер squid на экземпляр I2.

...