Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何确定URL是http还是https?_Java_Url_Jsoup_Web Crawler - Fatal编程技术网

Java如何确定URL是http还是https?

Java如何确定URL是http还是https?,java,url,jsoup,web-crawler,Java,Url,Jsoup,Web Crawler,我正在用Java编写一个网络爬虫工具。当我键入网站名称时,如何使其在不定义协议的情况下以http或https连接到该网站 try { Jsoup.connect("google.com").get(); } catch (IOException ex) { Logger.getLogger(LinkGUI.class.getName()).log(Level.SEVERE, null, ex); } 但我得到了一个错误: java.lang.IllegalArgumentExcep

我正在用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);
}

注意:每个URL只应使用usesHttps()方法一次,以确定要使用的协议。知道这一点后,应该直接使用Jsoup.connect()进行连接。这将更有效率。

不,JDK中没有这样的类,我怀疑任何库都不允许这样做。你应该清楚你想要什么。HTTP和HTTPS非常不同。只需在
URL
之前加前缀
HTTP://
HTTPS://
?我不知道您的用例,但尝试使用HTTP,应该可以。。大多数网站实现url重定向。我同意上面的评论,我想做的是我有一个165门课程的列表,每门课程都有65-71个html页面,上面都有链接。我正在编写一个Java程序来测试链接是否断开。我不建议每天都使用这种方法,因为引发异常是一项代价高昂的操作。最好一次检测访问模式,下次使用检测到的协议连接。