Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过另一台服务器转发Java HTTP请求_Java_Http_Amazon Ec2_Apache Httpclient 4.x - Fatal编程技术网

通过另一台服务器转发Java HTTP请求

通过另一台服务器转发Java HTTP请求,java,http,amazon-ec2,apache-httpclient-4.x,Java,Http,Amazon Ec2,Apache Httpclient 4.x,我有两个AWS实例I1和I2,其Ip地址分别为ip1和ip2。我想要实现的是: 我想从I1(使用JavaHttpClient)点击一个url,并希望该请求应该通过I2实例,也就是说,到外部世界,该请求似乎来自实例I2 例如: 我正在从实例I1执行下面提到的代码: class Test { public static void main(String[] args) { String url = "https://api.ipify.org?format=json",

我有两个AWS实例I1和I2,其Ip地址分别为ip1和ip2。我想要实现的是:

  • 我想从I1(使用JavaHttpClient)点击一个url,并希望该请求应该通过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);
}
}
输出应该是实例I2的公共Ip。但它抛出了一个例外:

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)
线程“main”java.net.ConnectException中的异常:拒绝连接(拒绝连接) 位于java.net.PlainSocketImpl.socketConnect(本机方法) 位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 位于java.net.Socket.connect(Socket.java:589) 位于java.net.Socket.connect(Socket.java:538) 位于sun.net.NetworkClient.doConnect(NetworkClient.java:180) 位于sun.net.www.http.HttpClient.openServer(HttpClient.java:463) http.HttpClient$1.run(HttpClient.java:515) http.HttpClient$1.run(HttpClient.java:513) 位于java.security.AccessController.doPrivileged(本机方法) http.HttpClient.privilegedOpenServer(HttpClient.java:512) 位于sun.net.www.http.HttpClient.openServer(HttpClient.java:553) 在sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:264) 位于sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367) 位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) 位于sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1199) 位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050) 位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) 位于sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:162) 位于sun.net.www.protocol.https.HttpsURLConnectionImpl$connect.call(未知源) 位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) 位于com.exp.Test.main(Test.java:24) 我在谷歌上搜索了上述用例,但没有找到任何东西。欢迎提供任何帮助。

此问题已修复。
在实例I2上安装了squid服务器。

我假设第24行是
connection.connect()?是,it连接。连接();我不能理解你的意思