为什么这个站点使用Java openStream()方法返回IOException?

时间:2018-04-15 07:05:20

标签: java html web web-scraping ioexception

我正在编写一个程序来输出网站的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
         }
      }
   }
}

1 个答案:

答案 0 :(得分:0)

这是因为当您在http中为http://science.energy.gov/发送请求时,它会自动重定向到https,这意味着该网站将重新加载。并且您的程序无法处理重定向请求。所以它就停止了。没有输出没有错误。

现在关于SSLHandshakeException。该错误解释为自己, 无法找到所请求目标的有效证书路径 。这意味着您的java密钥库没有您尝试连接的服务的ssl证书。因此,您需要从您尝试连接的服务器获取公共证书。请阅读this answer以获取更多信息。

同时阅读,