从 google 获取输入流时连接被拒绝
Connection refused while getting inputstream from google
我正在编写一种方法来将 GET 请求发送到端点并将响应文本解析为 json。
public static KafkaConnection getKafkaConnection(String sUrl) throws IOException {
URL url=new URL(sUrl);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
InputStream is = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null;) {
builder.append(line).append("\n");
}
String jsonText = builder.toString();
JSONObject json = new JSONObject(jsonText);
KafkaConnection kc = new KafkaConnection();
JSONArray array = json.getJSONArray("address");
List<String> list = new ArrayList<String>();
for (int i = 0; i < array.length(); i++) {
list.add(array.getString(i));
}
kc.setAddresses(list);
kc.setZookeeper(json.getString("zookeeper"));
return kc;
}
但是我在第 InputStream is = con.getInputStream();
行收到 "Connection refused" 错误。对于任何 url。甚至http://www.google.com
。这些 url 可从浏览器访问或在同一台计算机上使用 curl
命令。使用 HttpUrlConnection 导致连接失败的原因是什么?
下面是堆栈跟踪:
Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
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.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
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:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
at sun.net.www.http.HttpClient.New(HttpClient.java:308)
at sun.net.www.http.HttpClient.New(HttpClient.java:326)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at com.lgc.dist.plat.test.kafka.KafkaTestUtils.getKafkaConnection(KafkaTestUtils.java:30)
at com.lgc.dist.plat.test.kafka.KafkaTestUtils.main(KafkaTestUtils.java:54)
编辑
根据回答,大家一致认为这是防火墙问题。
我确实为我的电脑设置了环境变量 http_proxy
和 https_proxy
如下
https://user:pass@np1prxy801.corp.company.com:80
所以我在连接前添加了如下代码:
System.setProperty("http.proxyHost", "https://np1prxy801.corp.company.com");
System.setProperty("http.proxyPort", "80");
String user = "user";
String password = "pass";
Authenticator.setDefault(
new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
user, password.toCharArray());
}
}
);
但是,我仍然遇到 connection refused
错误。
尝试连接之前,尝试
System.setProperty("http.proxyHost", "your.proxy.server.com");
System.setProperty("http.proxyPort", "{您的代理端口}");
作为实验
基于其他两篇文章Eclipse Outbound connection blocked : 相同的url works from web browser 终于让它与下面的代码一起工作
和
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("np1prxy801.corp.abc.com", 80));
URL url=new URL(sUrl);
HttpURLConnection con = (HttpURLConnection)url.openConnection(proxy);
String user = "user";
String password = "password";
Authenticator.setDefault(
new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
user, password.toCharArray());
}
}
);
con.setRequestMethod("GET");
InputStream is = con.getInputStream();
我正在编写一种方法来将 GET 请求发送到端点并将响应文本解析为 json。
public static KafkaConnection getKafkaConnection(String sUrl) throws IOException {
URL url=new URL(sUrl);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
InputStream is = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null;) {
builder.append(line).append("\n");
}
String jsonText = builder.toString();
JSONObject json = new JSONObject(jsonText);
KafkaConnection kc = new KafkaConnection();
JSONArray array = json.getJSONArray("address");
List<String> list = new ArrayList<String>();
for (int i = 0; i < array.length(); i++) {
list.add(array.getString(i));
}
kc.setAddresses(list);
kc.setZookeeper(json.getString("zookeeper"));
return kc;
}
但是我在第 InputStream is = con.getInputStream();
行收到 "Connection refused" 错误。对于任何 url。甚至http://www.google.com
。这些 url 可从浏览器访问或在同一台计算机上使用 curl
命令。使用 HttpUrlConnection 导致连接失败的原因是什么?
下面是堆栈跟踪:
Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
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.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
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:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
at sun.net.www.http.HttpClient.New(HttpClient.java:308)
at sun.net.www.http.HttpClient.New(HttpClient.java:326)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at com.lgc.dist.plat.test.kafka.KafkaTestUtils.getKafkaConnection(KafkaTestUtils.java:30)
at com.lgc.dist.plat.test.kafka.KafkaTestUtils.main(KafkaTestUtils.java:54)
编辑 根据回答,大家一致认为这是防火墙问题。
我确实为我的电脑设置了环境变量 http_proxy
和 https_proxy
如下
https://user:pass@np1prxy801.corp.company.com:80
所以我在连接前添加了如下代码:
System.setProperty("http.proxyHost", "https://np1prxy801.corp.company.com");
System.setProperty("http.proxyPort", "80");
String user = "user";
String password = "pass";
Authenticator.setDefault(
new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
user, password.toCharArray());
}
}
);
但是,我仍然遇到 connection refused
错误。
尝试连接之前,尝试
System.setProperty("http.proxyHost", "your.proxy.server.com"); System.setProperty("http.proxyPort", "{您的代理端口}");
作为实验
基于其他两篇文章Eclipse Outbound connection blocked : 相同的url works from web browser 终于让它与下面的代码一起工作 和
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("np1prxy801.corp.abc.com", 80));
URL url=new URL(sUrl);
HttpURLConnection con = (HttpURLConnection)url.openConnection(proxy);
String user = "user";
String password = "password";
Authenticator.setDefault(
new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
user, password.toCharArray());
}
}
);
con.setRequestMethod("GET");
InputStream is = con.getInputStream();