通过另一台服务器转发Java HTTP请求
我有两个AWS实例I1和I2,其Ip地址分别为ip1和ip2。我想要实现的是:通过另一台服务器转发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",
- 我想从I1(使用JavaHttpClient)点击一个url,并希望该请求应该通过I2实例,也就是说,到外部世界,该请求似乎来自实例I2
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连接。连接();我不能理解你的意思