我尝试获取https网址的页面内容,该网址内容在获取输入流时会引发异常.
String httpsURL = "https://careers.virtusa.com/";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
InputStream ins = con.getInputStream();
Run Code Online (Sandbox Code Playgroud)
例外情况如下,
Exception in thread "main" javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:523)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
at url.JavaHttpsExample.main(JavaHttpsExample.java:18)
Run Code Online (Sandbox Code Playgroud)
无论HttpURLConnection和HttpsURLConnection失败.我试过org.apache.http.impl.client.CloseableHttpClient但得到了同样的例外.在浏览器中它工作正常.
我不明白plaintext connection你得到的错误。我还验证了您尝试梳理的站点实际上已配置为 HTTPS。这是我得到的异常:
java.security.cert.CertificateException:找不到与 sub.website.com 匹配的主题备用 DNS 名称。
解决此问题的一种方法是安装信任所有主机(包括sun.website.com)的主机验证程序。尝试使用以下代码片段将目标页面输出到 Java 控制台:
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
String httpsURL = "https://sub.website.com/";
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String input;
while ((input = br.readLine()) != null) {
System.out.println(input);
}
br.close();
Run Code Online (Sandbox Code Playgroud)
笔记:
当OP使用不同的网站时,我给出了这个答案。答案对于给定的条件是有效的,尽管从那时起OP可能已经改变。
| 归档时间: |
|
| 查看次数: |
6195 次 |
| 最近记录: |