我正在编写一个程序来输出网站的HTML代码。我已经在https://www.stackoverflow.com这样的网站上对它进行了测试。但是,当我尝试使用https://www.science.energy.gov运行程序时,它不起作用并抛出IOException。如果我将https
更改为http
并使用http://www.science.energy.gov运行,程序将运行但不会打印任何内容。我不确定为什么http
网站的HTML代码没有显示。
以下是HTML提取程序的相关代码:
import java.net.*;
import java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL url;
InputStream is = null;
DataInputStream dis;
String line;
try {
url = new URL("https://science.energy.gov/");
is = url.openStream(); // throws an IOException
dis = new DataInputStream(new BufferedInputStream(is));
while ((line = dis.readLine()) != null) {
System.out.println(line);
}
} catch (MalformedURLException mue) {
mue.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
is.close();
} catch (IOException ioe) {
// nothing to see here
}
}
}
}
答案 0 :(得分:0)
这是因为当您在http
中为http://science.energy.gov/发送请求时,它会自动重定向到https
,这意味着该网站将重新加载。并且您的程序无法处理重定向请求。所以它就停止了。没有输出没有错误。
现在关于SSLHandshakeException
。该错误解释为自己, 无法找到所请求目标的有效证书路径 。这意味着您的java密钥库没有您尝试连接的服务的ssl证书。因此,您需要从您尝试连接的服务器获取公共证书。请阅读this answer以获取更多信息。
同时阅读,