`
chenyunhong
  • 浏览: 136694 次
  • 性别: Icon_minigender_1
  • 来自: 真的不知道
社区版块
存档分类
最新评论

用JAVA判断一个URL是否有效

    博客分类:
  • Java
阅读更多

 最近因项目需求,需要针对一些URL地址进行检测是否可用,使用java.net 下的类来实现,主要用到了 URL和HttpURLConnection 二个类 ,URL 是统一资源标识符的引用,一个URL实例代表着一个url的引用,开始使用了URL中的的openStream()方法,这样使用倒是可以,但是速度慢,代码如下:

try {
     url = new URL("http://127.0.0.1/sj/user/getUser");
     in = url.openStream();
} catch (Exception e1) {
     System.out.println("连接打不开!");
     url = null;
}
 

 

下面判断url是不是null就可以了,速度慢

最后使用了HttpURLConnection 中的 getResponseCode();方法,HttpURLConnection : 通常一个HttpURLConnection 的实例可以生成一个请求,它有个方法 getResponseCode();可以得到请求的响应状态,该方法返回一个 int 分别是 200 and 404 如无法从响应中识别任何代码则返回 -1,代码如下:

 

 

/**
	  * 功能:检测当前URL是否可连接或是否有效,
	  * 描述:最多连接网络 3 次, 如果 3 次都不成功,视为该地址不可用
	  * @param  urlStr 指定URL网络地址
	  * @return URL
	  */
	 public synchronized String isConnect(String urlStr) {
		 int counts = 0;
		 retu = "";
		 if (urlStr == null || urlStr.length() <= 0) {                       
			 return null;                 
		 }
		 while (counts < StaticConstant.REQUEST_COUNT) {
			 long start = 0;
			 try {
				 url = new URL(urlStr);
				 start = System.currentTimeMillis();
				 con = (HttpURLConnection) url.openConnection();
				 state = con.getResponseCode();
				 log.info("请求断开的URL一次需要:"+(System.currentTimeMillis()-start)+"毫秒");
				 if (state == 200) {
					 retu = "ok";
					 log.info(urlStr+"--可用");
				 }
				 break;
			 }catch (Exception ex) {
				 counts++; 
				 log.info("请求断开的URL一次需要:"+(System.currentTimeMillis()-start)+"毫秒");
				 log.info("连接第 "+counts+" 次,"+urlStr+"--不可用");
				 continue;
			 }
		 }
		 return retu;
	 }
 

 

分享到:
评论
8 楼 luowuping 2012-05-30  
我想问一下,要怎么样才能判断这url是否有效,无效的情况下,是否会跳到404页面。在网上找的,时能判断是否有效,但是如果是跳转到404,就还是判断成有效,,,求解答
7 楼 lijingf117 2011-06-21  
楼主还没有考虑到使用代理否的问题,得加上代理的判断
6 楼 ttianyu0203 2011-06-21  
只支持http协议吗?ftp呢?
5 楼 pktangshao 2011-06-20  
代码是不是有点问题
}catch (Exception ex) {
     counts++; 
     System.out.println("URL不可用,连接第 "+counts+" 次");
     urlStr = null;
     continue;
    }

如果第一次就出错了.那么走到catch中.你把urlStr置为空.那么后面的4次连接有何意义?其实你只连接了一次.
ps:你要检查链接是否可用.为何不直接返回state 而返回Url
4 楼 chenyunhong 2011-06-20  
Dominic_jin 写道
我考虑的问题是,如何分辨 找不到页面 和 跳转两种情况,是不是有的网站会在页面不存在的时候自动跳转到特定的 找不到页面,这个可用还是不可用?另外在访问页面需要检查权限的情况下,自动跳转到登陆页面是认定为可用还是不可用,又何以判断这个页面是不是存在
可用和不可用在项目中怎么界定

3 楼 silence1214 2011-06-20  
Dominic_jin 写道
我考虑的问题是,如何分辨 找不到页面 和 跳转两种情况,是不是有的网站会在页面不存在的时候自动跳转到特定的 找不到页面,这个可用还是不可用?另外在访问页面需要检查权限的情况下,自动跳转到登陆页面是认定为可用还是不可用,又何以判断这个页面是不是存在
可用和不可用在项目中怎么界定


这个好判断,找不到页面是404的response code。
跳转的话有2中情况,一种是根据协议跳转就是302,303的code,另外一种是js的redirect。不管是哪种,只要不是404就接下来可以继续根据状态吗或者response 的content的特征来判断。解决了你的问题了吧
2 楼 Dominic_jin 2011-06-20  
我考虑的问题是,如何分辨 找不到页面 和 跳转两种情况,是不是有的网站会在页面不存在的时候自动跳转到特定的 找不到页面,这个可用还是不可用?另外在访问页面需要检查权限的情况下,自动跳转到登陆页面是认定为可用还是不可用,又何以判断这个页面是不是存在
可用和不可用在项目中怎么界定
1 楼 cnsuifeng 2011-06-18  
不错 以前只是注意到了url的格式问题,对于是否可用没有考虑,这个确实不错,谢谢分享思路

相关推荐

    URL的又有效性判断

    URL的又有效性判断

    JAVA验证URL是否有效连接的方法

    昨天做了个监控远程服务器是否正常连接,费了很大脑动力,写成了下面的方法,现在分享给大家,希望可以帮助都更多的人。 写个方法的时候一直有个误区,不知道怎么去监控远程服务器,望遇到同样问题人,跳出这个思想...

    判断是否有效的可以用网络

    大概的思路:开一个总的线程管理一个判断某个URL是否有效的,在里面用的是http://www.baidu.com测试,另一个是开个3秒线程[3秒也就是超时时间],如果有可用网络的话,线程1会在3秒内执行完成,也就是线程1会比线程2...

    java开源包4

    Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    Java EE常用框架.xmind

    不用我们去实现退出,只要去访问一个退出的url(该 url是可以不存在),由LogoutFilter拦截住,清除session。 数据回显 授权过滤器使用 XML配置方式 1.在配置文件上配置配置filter规则。/items...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    java-servlet-api.doc

    然而,一个映射可能是由一个URL和许多Servlet实例组成,例如:一个分布式的Servlet引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个Servlet实例,以平衡进程的载入。作为一个Servlet的...

    Java获取文件分辨率,大小等基本信息Demo

    这个文件中包含测试的Demo和需要的jar包,Demo中有两种方式来获取视频的分辨率,大小等基本信息,简单易上手,亲测有效,没效你顺着网线过来da我

    javascript如何判断输入的url是否正确

    网页得来,原网页广告太多,影响心情 代码如下: &lt;... &lt;head&gt; &lt;title&gt;检查是否为URL&lt;...“你输入的URL有效”&#41;; return true; } } [removed] &lt;/head&gt; &lt;body&gt; &lt;form name=”

    nutch介绍信息

    5,reduce只做一件事,判断url是不是在crawldb中已经存在,如果存在则直接读取原来CrawlDatum,如果是新host,则把相应状态存储到里边(STATUS_DB_UNFETCHED(状态意思为没有采集过)) 二、org.apache.nutch....

    Java-PHP-C#

    好了,现在我们要用我们所学的来干一些有用的事:构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: "10000.00" 和 "10,000.00",或者没有小数部分, "10000" and...

    一个web爬虫的事例.txt

    * 搜索程序应该在搜索过程中跳过这些区域,下面是robots.txt的一个例子: * # robots.txt for http://somehost.com/ User-agent: * Disallow: /cgi-bin/ * Disallow: /registration # Disallow robots on ...

    正则表达式经典实例

    《正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来... 使用8种编程语言的详细解决方案,包括一个正则表达式简明教程

    HttpClient以及获取页面内容应用

    通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一个Parser对象。 ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer???? ...

    ASP200问.EXE

    7.如何创建一个ASP文件并浏览其执行结果 第2章 ASP.NET运行模型 12.如何定义变量和判定变量类型 13.什么是变量的作用域 14.如何强制要求显式声明变量 15.如何保留或消除过程调用对变量的影响 16.如何创建和调整...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    除此之外,用户需要亲临检测机构实地送检,在检测的每一个环节用户也无法有效的进行追踪,这些都制约着认证检测领域的进一步发展。鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别...

    《javaScrip开发技术大全》源代码

    • sample41.htm 判断一个对象是否是另一个对象的原型对象 • sample42.htm 判断对象的属性是否可以被枚举 • sample43.htm 监视属性值的变化情况 第10章(\代码\第10章) • sample01....

    JavaScript完全自学宝典 源代码

    3.6.html 向数组头添加一个项。 3.7.html 多维数组的实现方法。 第4章(\c04) 示例描述:介绍JavaScript的面向对象特性。 4.1.html 对象的创建。 4.2.html 作为关联数组的对象与数组对象实现方式...

Global site tag (gtag.js) - Google Analytics