【发布时间】:2011-05-09 20:05:14
【问题描述】:
我需要检查一个 URL 是否存在。我想为此编写一个 servlet,即检查 URL 是否存在。如果输入的 URL 不存在,那么它应该返回一些消息。
【问题讨论】:
-
通常不能说一个 URL 不存在。
我需要检查一个 URL 是否存在。我想为此编写一个 servlet,即检查 URL 是否存在。如果输入的 URL 不存在,那么它应该返回一些消息。
【问题讨论】:
我使用这个 bash 脚本检查 url,但需要将所有文件放在文件“urls.csv”中
#!/bin/bash
###############################################
# mailto: ggerman@gmail.com
# checkurls
# https://github.com/ggerman/checkurls/
# require curl
###############################################
url() {
cat urls.csv |
replace |
show
}
replace() {
tr ',' ' '
}
show() {
awk '{print $1}'
}
url | \
while read CMD; do
echo $CMD
curl -Is $CMD | head -n 1
done
【讨论】:
更好的 HTTP 解决方案:
public static boolean exists(String URLName){
try {
HttpURLConnection.setFollowRedirects(false);
// note : you may also need
// HttpURLConnection.setInstanceFollowRedirects(false)
HttpURLConnection con =
(HttpURLConnection) new URL(URLName).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
如果您正在寻找任何其他 URL,请尝试此代码
public static boolean exists(String URLName){
boolean result = false;
try {
url = new URL("ftp://ftp1.freebsd.org/pub/FreeBSD/");
//url = new URL("ftp://ftp1.freebsd.org/pub/FreeBSD123/");//this will fail
input = url.openStream();
System.out.println("SUCCESS");
result = true;
} catch (Exception ex) {
Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
}
return result;
}
来源:http://www.rgagnon.com/javadetails/java-0059.html
【讨论】:
http 不是 URL 中唯一的协议/方案。
mailto:example@example.com 呢?
exist 的解释还不清楚。 URL的存在是什么意思?从我的角度来看,当我写下它并创建它时,该 URL 已经存在。也许 OP 只是想知道他是否可以访问由 HTTP-URL 表示的 HTTP-Resource,但这不是 OP 所要求的。 ;-)
您可以尝试 HTTP 的 HEAD 方法来查看服务器是否在特定 URL 上返回状态代码 200 并采取相应措施。
查看http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol 并向下滚动到请求方法。
【讨论】:
您可以建立连接,取回输入流并检查是否为空。
【讨论】: