我試圖從湯姆索亞冒險隨機線。這裏是我的代碼:javax.net.ssl.SSLHandshakeException:收到致命警報:handshake_failure,當試圖從項目Gutenberg抓取一條隨機線
public static void main(String[] args) {
try {
Random rand = new Random();
Document doc = Jsoup.connect("https://www.gutenberg.org/files/74/74-h/74-h.htm").timeout(10*1000).get();
String body = doc.select("p").text();
String[] bodytext = body.split("\\.");
int randomLine = rand.nextInt(bodytext.length);
if (bodytext[randomLine].startsWith(" \"")) {
System.out.println("Random line from " + bodytext[randomLine] + ".\"");
}
else {
System.out.println("Random line from " + bodytext[randomLine] + ".");
}
} catch (IOException ex) {
Logger.getLogger(JavaApplication8.class.getName()).log(Level.SEVERE, null, ex);
}
}
下面是我收到錯誤消息:
SEVERE: null
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2011)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1113)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1363)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:512)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:493)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:205)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:194)
at javaapplication8.JavaApplication8.main(JavaApplication8.java:27)
第27行是Document doc = Jsoup.connect("https://www.gutenberg.org/files/74/74-h/74-h.htm").timeout(10*1000).get();
什麼錯?幾個月前我做了這件事,而且我沒有任何問題,但是當我回到本週時,我收到了握手失敗錯誤。
根據ssllabs的說法,[url] gutenborg.org是152.19.134.47,只接受** TLS1.2 **,他們的證書日期爲9月22日,這表明他們可能已經做出了改變。默認情況下Java 7 SSL客戶端不提供TLS 1.2(或1.1),儘管程序可以改變這種情況,至少假設Jsoup使用默認的SSLSocketFactory並且它看起來似乎。 Java 8客戶端默認提供它們。然而,不管怎樣,我的DNS解析方式不同,我從afilias那裏看到的相當可疑的(klczy.com?)也是如此。 –
謝謝@ dave_thompson_085,你是對的,我正在更新答案 – fonkap