最近做了個叫NBA中文網(wǎng)的網(wǎng)站,但是經(jīng)常由于一些原因,會常常訪問不到.我就想能不能寫個程序使它檢測到如果不能訪問了就直接發(fā)郵件通知本人呢?借鑒HttpClient,我覺的可以實現(xiàn)了.呵呵.
     HttpClient簡介
HTTP 協(xié)議可能是現(xiàn)在 Internet 上使用得最多、最重要的協(xié)議了,越來越多的 Java 應(yīng)用程序需要直接通過 HTTP 協(xié)議來訪問網(wǎng)絡(luò)資源。雖然在 JDK 的 java.net 包中已經(jīng)提供了訪問 HTTP 協(xié)議的基本功能,但是對于大部分應(yīng)用程序來說,JDK 庫本身提供的功能還不夠豐富和靈活。HttpClient 是 Apache Jakarta Common 下的子項目,用來提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶端編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。HttpClient 已經(jīng)應(yīng)用在很多的項目中,比如 Apache Jakarta 上很著名的另外兩個開源項目 Cactus 和 HTMLUnit 都使用了 HttpClient,更多使用 HttpClient 的應(yīng)用可以參見http://wiki.apache.org/jakarta-httpclient/HttpClientPowered。HttpClient 項目非常活躍,使用的人還是非常多的。目前 HttpClient 版本是在 2005.10.11 發(fā)布的 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);
            
// 設(shè)置代理服務(wù)器地址和端口

            
// client.getHostConfiguration().setProxy("proxy_host_addr",proxy_port);
            
// 使用 GET 方法 ,如果服務(wù)器需要通過 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();


 

有了這一招,對待網(wǎng)站的檢測就沒有問題了.

參考資料

  • Commons logging包含了各種各樣的日志API的實現(xiàn),讀者可以通過站點http://jakarta.apache.org/commons/logging/得到詳細的內(nèi)容

  • Commons codec包含了一些一般的解碼/編碼算法。包含了語音編碼、十六進制、Base64和URL編碼等,通過http://jakarta.apache.org/commons/codec/可以得到詳細的內(nèi)容

  • rfc2616是關(guān)于HTTP/1.1的文檔,可以在http://www.faqs.org/rfcs/rfc2616.html上得到詳細的內(nèi)容,另外rfc1945是關(guān)于HTTP/1.0的文檔,通過http://www.faqs.org/rfcs/rfc1945.html可以得到詳細內(nèi)容

  • SSL――SSL 是由 Netscape Communications Corporation 于 1994 年開發(fā)的,而 TLS V1.0 是由 Internet Engineering Task Force(IETF)定義的標(biāo)準,它基于 SSL V3.0,并且在使用的加密算法上與其有些許的不同。例如,SSL 使用 Message Authentication Code(MAC)算法來生成完整性校驗值,而 TLS 應(yīng)用密鑰的 Hashing for Message Authentication Code(HMAC)算法。

  • IBM JSSE提供了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)的java實現(xiàn),在http://www-03.ibm.com/servers/eserver/zseries/software/java/jsse.html中可以得到詳細的信息

  • Keytool是一個管理密鑰和證書的工具。關(guān)于它詳細的使用信息可以在http://www.doc.ic.ac.uk/csg/java/1.3.1docs/tooldocs/solaris/keytool.html上得到

  • HTTPClient的主頁是http://jakarta.apache.org/commons/httpclient/,你可以在這里得到關(guān)于HttpClient更加詳細的信息