幫忙看下我這段配置,為什么不能訪問https的介面
static {
ConnectionSocketFactory plainsf = PlainConnectionSocketFactory.getSocketFactory();
SSLContext sc;
try {
sc = SSLContext.getInstance("TLS");
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager(){
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
} };
sc.init(null, trustAllCerts, null);
} catch (Exception e) {
LOG.error("some thing happen", e);
throw new ServiceException(e);
}
ConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sc, (s, sslSession) -> true);
ConnectionKeepAliveStrategy connectionKeepAliveStrategy = (httpResponse, httpContext) -> {
return 20L * 1000;
};
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory> create()
.register("http", plainsf).register("ftp", plainsf).register("https", sslsf).build();
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(registry);
connManager.setMaxTotal(400);
connManager.setDefaultMaxPerRoute(200);
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(HTTP_CONNECT_TIME_OUT)
.setConnectionRequestTimeout(3000).setSocketTimeout(HTTP_TIME_OUT).build();
client = HttpClients.custom().setConnectionManager(connManager)
.setRetryHandler(new DefaultHttpRequestRetryHandler()).setDefaultRequestConfig(requestConfig)
.setKeepAliveStrategy(connectionKeepAliveStrategy).build();
}
uj5u.com熱心網友回復:
百度上都是這么配的,到我這就不行了。最后回傳的client物件按道理應該是能訪問https介面的uj5u.com熱心網友回復:
錯誤資訊是什么?uj5u.com熱心網友回復:
15:37:14.226 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - Opening connection {s}->https://www.baidu.com:443
15:37:14.241 [main] DEBUG org.apache.http.impl.conn.DefaultHttpClientConnectionOperator - Connecting to www.baidu.com/180.101.49.11:443
15:37:14.241 [main] DEBUG org.apache.http.conn.ssl.SSLConnectionSocketFactory - Connecting socket to www.baidu.com/180.101.49.11:443 with timeout 15000
15:37:29.244 [main] DEBUG org.apache.http.impl.conn.DefaultHttpClientConnectionOperator - Connect to www.baidu.com/180.101.49.11:443 timed out. Connection will be retried using another IP address
15:37:29.244 [main] DEBUG org.apache.http.impl.conn.DefaultHttpClientConnectionOperator - Connecting to www.baidu.com/180.101.49.12:443
15:37:29.244 [main] DEBUG org.apache.http.conn.ssl.SSLConnectionSocketFactory - Connecting socket to www.baidu.com/180.101.49.12:443 with timeout 15000
15:37:44.247 [main] DEBUG org.apache.http.impl.conn.DefaultManagedHttpClientConnection - http-outgoing-0: Shutdown connection
15:37:44.248 [main] DEBUG org.apache.http.impl.execchain.MainClientExec - Connection discarded
15:37:44.249 [main] DEBUG org.apache.http.impl.conn.PoolingHttpClientConnectionManager - Connection released: [id: 0][route: {s}->https://www.baidu.com:443][total kept alive: 0; route allocated: 0 of 200; total allocated: 0 of 400]
15:37:44.249 [main] ERROR com.suning.itp.thor.common.utils.RestClient - 發送https://www.baidu.com 次數:0 請求回傳資訊:{},{}
15:37:44.250 [main] ERROR com.suning.itp.thor.common.utils.RestClient - http請求出現例外,次數:0,資訊:org.apache.http.conn.ConnectTimeoutException,Connect to www.baidu.com:443 [www.baidu.com/180.101.49.11, www.baidu.com/180.101.49.12] failed: connect timed out
15:37:46.258 [main] ERROR com.suning.itp.thor.common.utils.RestClient - http請求失敗
org.apache.http.conn.ConnectTimeoutException: Connect to www.baidu.com:443 [www.baidu.com/180.101.49.11, www.baidu.com/180.101.49.12] failed: connect timed out
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at com.suning.itp.thor.common.utils.RestClient.httpExecute(RestClient.java:326)
at com.suning.itp.thor.common.utils.RestClient.httpGet(RestClient.java:112)
at com.suning.itp.thor.common.utils.RestClient.httpGet(RestClient.java:107)
at com.suning.itp.thor.common.utils.RestClient.main(RestClient.java:103)
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
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 org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:339)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 13 common frames omitted
Exception in thread "main" org.apache.http.conn.ConnectTimeoutException: Connect to www.baidu.com:443 [www.baidu.com/180.101.49.11, www.baidu.com/180.101.49.12] failed: connect timed out
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at com.suning.itp.thor.common.utils.RestClient.httpExecute(RestClient.java:326)
at com.suning.itp.thor.common.utils.RestClient.httpGet(RestClient.java:112)
at com.suning.itp.thor.common.utils.RestClient.httpGet(RestClient.java:107)
at com.suning.itp.thor.common.utils.RestClient.main(RestClient.java:103)
錯誤資訊就是超時,本地用其他http工具除錯都沒問題
uj5u.com熱心網友回復:
現在問題是這樣,環境是公司內網,本地用其他http工具訪問外網https是可以訪問的,就是在java代碼中不能訪問外部https。然后我把電腦連上我自己的手機熱點,其他什么然后代碼中也可以訪問外部https了。
問題應該是網路原因,但是公司內網中為什么用postman也能訪問https呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/37894.html
標籤:Web 開發
