用Java判断一个URL

来源:互联网 发布:数学必修三人教版算法 编辑:程序博客网 时间:2024/06/03 21:01

方法一:(可用于判断网络是否连通)

import java.io.InputStream;
import java.net.URL;


public class Test {
public static void main(String[] args) {
 URL url;
 try {
      url = new URL("http://www.baidu.com");
      InputStream in = url.openStream();
      System.out.println("连接可用");
 } catch (Exception e1) {
      System.out.println("连接打不开!");
      url = null;
 }
}
}

方法一使用java.net 下的URL类来实现,URL 是统一资源标识符的引用,一个URL实例代表着一个url的引用,然后使用了URL中的的openStream()方法。


方法二: (可判断某个URL地址否有效,但是对于有效但明明打不开的网址却不能反馈给我们期望的效果(期望false),实际true,看不到试图连接5次的效果)
import java.net.HttpURLConnection;
import java.net.URL;

/**
* 文件名称为:URLAvailability.java
* 文件功能简述: 描述一个URL地址是否有效
* @author Jason
* @time   2010-9-14
*
*/
public class URLAvailability {
private static URL url;
private static HttpURLConnection con;
private static int state = -1;

/**
   * 功能:检测当前URL是否可连接或是否有效,
   * 描述:最多连接网络 5 次, 如果 5 次都不成功,视为该地址不可用
   * @param urlStr 指定URL网络地址
   * @return URL
   */
public synchronized URL isConnect(String urlStr) {
   int counts = 0;
   if (urlStr == null || urlStr.length() <= 0) {                      
    return null;                
   }
   while (counts < 5) {
    try {
     url = new URL(urlStr);
     con = (HttpURLConnection) url.openConnection();
     state = con.getResponseCode();
     System.out.println(counts +"= "+state);
     if (state == 200) {
      System.out.println("URL可用!");
     }
     break;
    }catch (Exception ex) {
     counts++;
     System.out.println("URL不可用,连接第 "+counts+" 次");
     urlStr = null;
     continue;
    }
   }
   return url;
}
public static void main(String[] args) {
 URLAvailability u=new URLAvailability();
 u.isConnect("http://www.baidu.com");
}
}

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

******************************************************************************************************************************

//采集的时候用的两种方法

方法一:(与上面的方法一相同,URL的openStream()方法)

package com.tender.news.crawler;

import java.net.HttpURLConnection;

import java.net.URL;

public class URLOK {
 public static void main(String[] args) {
  URLOK uu=new URLOK();
  System.out.println(uu.exists("http://www.baidu.com"));
  // 广德县招投标中心
  System.out
    .println(uu.exists("http://www.baidu.com/link?url=pHkEGJqjJ4zBBpC8yDF8xDh8vibi1lxrIGZBdokH2t362q"));
 }
 //
 public  boolean exists(String URLName) {
  try {
   // 设置此类是否应该自动执行 HTTP 重定向(响应代码为 3xx 的请求)。
   HttpURLConnection.setFollowRedirects(false);
   // 到 URL 所引用的远程对象的连接
   HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection();
   /*
    * 设置 URL 请求的方法, GET POST HEAD OPTIONS PUT DELETE TRACE
    * 以上方法之一是合法的,具体取决于协议的限制。
    */
   con.setRequestMethod("HEAD");
   // 从 HTTP 响应消息获取状态码
   return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }
 }
}
方法二:(对于有效却打不开页面的URL能反馈给我们期望的结果false)

//判断网址是否可用
//   System.out.println(URLEncoder.encode("合肥","GBK"));
public   String   test(String str){
 String result="good";
 URL url=null;
 try{
 url=new URL(str);
// HttpURLConnection conn=null;
 /* try{
 conn = (HttpURLConnection) url.openConnection();}
 catch(Exception e){
  result="block";
 }
 conn.setConnectTimeout(5 * 1000); // timeout setting
*/ InputStream   in   =   url.openStream();
 in.close();
 }
 catch(IOException   e){
  e.printStackTrace();
 System.out.println( ":"   +   str.toString());
 result="block";
 }
 return result;
 }
//

通过采集下面的方法一和方法二可以很好的判断一个网站的连通性以及有效性,方便采集。

0 0
原创粉丝点击