检查 URL 是不是存在

Posted

技术标签:

【中文标题】检查 URL 是不是存在【英文标题】:Checking if a URL exists or not检查 URL 是否存在 【发布时间】:2011-05-09 20:05:14 【问题描述】:

我需要检查一个 URL 是否存在。我想为此编写一个 servlet,即检查 URL 是否存在。如果输入的 URL 不存在,那么它应该返回一些消息。

【问题讨论】:

通常不能说一个 URL 不存在。 【参考方案1】:

我使用这个 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

【讨论】:

我投了反对票,因为这个问题是用 Java 标记的【参考方案2】:

更好的 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 中唯一的协议/方案。 @Michael Konietzka 更新可能会回答您的评论 mailto:example@example.com 呢? 但 is 是一个存在的有效 URL。 ;-) 我在需求中看不到这一点。 ;-) OP 通常是从 URL 说话。 ;-)。此外,exist 的解释还不清楚。 URL的存在是什么意思?从我的角度来看,当我写下它并创建它时,该 URL 已经存在。也许 OP 只是想知道他是否可以访问由 HTTP-URL 表示的 HTTP-Resource,但这不是 OP 所要求的。 ;-)【参考方案3】:

您可以尝试 HTTP 的 HEAD 方法来查看服务器是否在特定 URL 上返回状态代码 200 并采取相应措施。

查看http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol 并向下滚动到请求方法

【讨论】:

【参考方案4】:

您可以建立连接,取回输入流并检查是否为空。

【讨论】:

以上是关于检查 URL 是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

检查url图片是不是存在

检查 URL 文件是不是存在

检查服务器上是不是存在 URL

检查 URL 是不是存在于 Flutter 中时出错

如何通过 PHP 检查 URL 是不是存在?

Laravel 检查给定 url 的路由是不是存在于路由中