我们尝试使用 HTTPS 和基本身份验证编写一个休息客户端。代码如下。我得到以下例外:
java.net.ConnectException:连接超时:连接
任何人都可以帮我找到我做错的事吗?
public class sampleMain {
public static void main(String[] args) {
ClientConfig clientConfig = new DefaultClientConfig();
/* clientConfig.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);*/
clientConfig.getProperties().put(ClientConfig.PROPERTY_READ_TIMEOUT, 300000);
clientConfig.getProperties().put(ClientConfig.PROPERTY_CONNECT_TIMEOUT, 30000);
disableSslVerification(clientConfig);
Client client = Client.create(clientConfig);
client.setFollowRedirects(true);
HTTPBasicAuthFilter authenticationFilter = new HTTPBasicAuthFilter("admin", "APP@#1234");
client.addFilter(authenticationFilter);
WebResource webResource = client.resource("https://someIP:443/rest/api/topology/servicesnodes");
ClientResponse response = webResource.accept(MediaType.APPLICATION_JSON).get(ClientResponse.class);
System.out.println(response);
}
//below method is used to set ssl context to clientconfig as https property
private static void disableSslVerification(ClientConfig clientConfig) {
try {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
} };
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
clientConfig.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
}, sc));
} catch (NoSuchAlgorithmException ae1) {
} catch (KeyManagementException e) {
}
}
}
答案 0 :(得分:0)
此例外
java.net.ConnectException: Connection timed out: connect
除了在给定的超时内通过套接字级别的给定端口连接到给定IP /主机不可能的意思,在你的情况下足够大,以排除超时值本身的考虑
在99%的情况下,当来自请求者网络的给定端口 无法访问时,会发生这种情况,实际上并不取决于编写的代码。< / p>
假设 someIP不是代码中的拼写错误,从此时开始,您将 您可以尝试在浏览器中打开整个链接,看看它是否在您的代码之外工作。 此外,您可以验证 无法访问IP的典型案例可以是 所有这些案件都需要联系IP /主机所有者以进一步澄清。 修改 查看此answer以及'debug'程序说明someIP
替换为实际的真实IP地址:
someIP
端口可以从您的代码启动位置访问443
。为此,请在运行代码的服务器上从命令行执行以下命令:telnet someIP 443
Connected to someIP. Escape character is '^]'.
的内容,表示连接成功。按Ctrl + C退出会话Trying someIP...
或以其他方式指示错误 - 确认通过给定端口无法访问给定IP