最近做了个叫NBA中文网的网站,但是经常由于一些原因,会常常访问不到.我就想能不能写个程序使它检测到如果不能访问了就直接发邮件通知本人呢?借鉴HttpClient,我觉的可以实现了.呵呵.
     HttpClient简介
HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient,更多使用 HttpClient 的应用可以参见http://wiki.apache.org/jakarta-httpclient/HttpClientPowered。HttpClient 项目非常活跃,使用的人还是非常多的。目前 HttpClient 版本是在 2005.10.11 发布的 3.0 RC4
    我写的代码:)

public Object[] getResponseInfo(String url,NameValuePair[] pairs,Cookie[] cookies,boolean isGet) {
        Object[] arrResponse 
= new Object[3];
        
try {
            
if(pairs.length>1)
                arrResponse[
2= pairs[0].getName() +"=" + pairs[0].getValue();
            HttpClient client 
=  new HttpClient(connectionManager);
            HttpState initialState 
= new HttpState();     
            initialState.addCookies(cookies);
            client.setState(initialState);
            
// 设置代理服务器地址和端口

            
// client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
            
// 使用 GET 方法 ,如果服务器需要通过 HTTPS 连接,那只需要将下面 URL 中的 http 换成 https
            
//HttpMethod method = new GetMethod("http://java.sun.com");
            
// 使用POST方法
            
//client.
            HttpMethod method = null;
            
if(isGet)
                method 
= new GetMethod(url);
            
else
                method 
= new PostMethod(url);
            method.setQueryString(pairs);
            client.executeMethod(method);
            InputStream in 
= method.getResponseBodyAsStream();
            Header[] headList 
= method.getResponseHeaders("Set-Cookie");
            List
<String> cooikeList = new ArrayList<String>();
            
for(Header head:headList){
                logger.debug(head.getName()
+"=" + head.getValue());
                cooikeList.add(head.getValue());
            }

            arrResponse[
0= cooikeList;
            
byte[] streamBytes = XmlUtils.readStream2bytes(in);
            arrResponse[
1= streamBytes;
            
if(logger.isDebugEnabled())
                logger.debug(
new String(streamBytes));
            
// 释放连接
            method.releaseConnection();
            
return arrResponse;
        }
 catch (Exception e) {
            
// TODO 自动生成 catch 块
            e.printStackTrace();
            
return null;
        }

    }


 
public static MultiThreadedHttpConnectionManager connectionManager = 
         
new MultiThreadedHttpConnectionManager();


 

有了这一招,对待网站的检测就没有问题了.

参考资料

  • Commons logging包含了各种各样的日志API的实现,读者可以通过站点http://jakarta.apache.org/commons/logging/得到详细的内容

  • Commons codec包含了一些一般的解码/编码算法。包含了语音编码、十六进制、Base64和URL编码等,通过http://jakarta.apache.org/commons/codec/可以得到详细的内容

  • rfc2616是关于HTTP/1.1的文档,可以在http://www.faqs.org/rfcs/rfc2616.html上得到详细的内容,另外rfc1945是关于HTTP/1.0的文档,通过http://www.faqs.org/rfcs/rfc1945.html可以得到详细内容

  • SSL――SSL 是由 Netscape Communications Corporation 于 1994 年开发的,而 TLS V1.0 是由 Internet Engineering Task Force(IETF)定义的标准,它基于 SSL V3.0,并且在使用的加密算法上与其有些许的不同。例如,SSL 使用 Message Authentication Code(MAC)算法来生成完整性校验值,而 TLS 应用密钥的 Hashing for Message Authentication Code(HMAC)算法。

  • IBM JSSE提供了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)的java实现,在http://www-03.ibm.com/servers/eserver/zseries/software/java/jsse.html中可以得到详细的信息

  • Keytool是一个管理密钥和证书的工具。关于它详细的使用信息可以在http://www.doc.ic.ac.uk/csg/java/1.3.1docs/tooldocs/solaris/keytool.html上得到

  • HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息