我正在用Java编写网络爬虫工具。当我键入网站名称时,如何在不定义协议的情况下使它以http或https连接到该网站?
try {
Jsoup.connect("google.com").get();
} catch (IOException ex) {
Logger.getLogger(LinkGUI.class.getName()).log(Level.SEVERE, null, ex);
}
但是我得到了错误:
java.lang.IllegalArgumentException: Malformed URL: google.com
我能做什么?是否有任何类或库可以做到这一点?
我想做的是,我有165门课程的列表,每门课程都有65-71个html页面,并在所有页面中都包含链接。我正在编写一个Java程序来测试链接是否断开。
最佳答案
您可以编写自己的简单方法来尝试两种协议,例如:
static boolean usesHttps(final String urlWithoutProtocol) throws IOException {
try {
Jsoup.connect("http://" + urlWithoutProtocol).get();
return false;
} catch (final IOException e) {
Jsoup.connect("https://" + urlWithoutProtocol).get();
return true;
}
}
然后,您的原始代码可以是:
try {
boolean shouldUseHttps = usesHttps("google.com");
} catch (final IOException ex) {
Logger.getLogger(LinkGUI.class.getName()).log(Level.SEVERE, null, ex);
}
注意:每个网址只应使用一次useHttps()方法,以确定要使用的协议。知道之后,您应该直接使用Jsoup.connect()进行连接。这样会更有效率。