日本一区二区三区在线播放,中文国产一区,久久经典视频http://www.aygfsteel.com/caizh2009/category/44583.html與大家共同成長(zhǎng)zh-cnFri, 09 Apr 2010 07:06:53 GMTFri, 09 Apr 2010 07:06:53 GMT60HttpClient入門(mén)http://www.aygfsteel.com/caizh2009/archive/2010/04/09/317846.html小菜毛毛小菜毛毛Fri, 09 Apr 2010 06:38:00 GMThttp://www.aygfsteel.com/caizh2009/archive/2010/04/09/317846.htmlhttp://www.aygfsteel.com/caizh2009/comments/317846.htmlhttp://www.aygfsteel.com/caizh2009/archive/2010/04/09/317846.html#Feedback0http://www.aygfsteel.com/caizh2009/comments/commentRss/317846.htmlhttp://www.aygfsteel.com/caizh2009/services/trackbacks/317846.htmlHttpClient 是 Apache Jakarta Common 下的子項(xiàng)目,可以用來(lái)提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶(hù)端編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。本文首先介紹 HTTPClient,然后根據(jù)作者實(shí)際工作經(jīng)驗(yàn)給出了一些常見(jiàn)問(wèn)題的解決方法。

HttpClient簡(jiǎn)介

HTTP 協(xié)議可能是現(xiàn)在 Internet 上使用得最多、最重要的協(xié)議了,越來(lái)越多的 Java 應(yīng)用程序需要直接通過(guò) HTTP 協(xié)議來(lái)訪問(wèn)網(wǎng)絡(luò)資源。雖然在 JDK 的 java.net 包中已經(jīng)提供了訪問(wèn) HTTP 協(xié)議的基本功能,但是對(duì)于大部分應(yīng)用程序來(lái)說(shuō),JDK 庫(kù)本身提供的功能還不夠豐富和靈活。HttpClient 是 Apache Jakarta Common 下的子項(xiàng)目,用來(lái)提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶(hù)端編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。HttpClient 已經(jīng)應(yīng)用在很多的項(xiàng)目中,比如 Apache Jakarta 上很著名的另外兩個(gè)開(kāi)源項(xiàng)目 Cactus 和 HTMLUnit 都使用了 HttpClient,更多使用 HttpClient 的應(yīng)用可以參見(jiàn)http://wiki.apache.org/jakarta-httpclient/HttpClientPowered。HttpClient 項(xiàng)目非常活躍,使用的人還是非常多的。目前 HttpClient 版本是在 2005.10.11 發(fā)布的 3.0 RC4 。





回頁(yè)首


HttpClient 功能介紹

以下列出的是 HttpClient 提供的主要的功能,要知道更多詳細(xì)的功能可以參見(jiàn) HttpClient 的主頁(yè)。

  • 實(shí)現(xiàn)了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
  • 支持自動(dòng)轉(zhuǎn)向
  • 支持 HTTPS 協(xié)議
  • 支持代理服務(wù)器等

下面將逐一介紹怎樣使用這些功能。首先,我們必須安裝好 HttpClient。





回頁(yè)首


HttpClient 基本功能的使用

GET 方法

使用 HttpClient 需要以下 6 個(gè)步驟:

1. 創(chuàng)建 HttpClient 的實(shí)例

2. 創(chuàng)建某種連接方法的實(shí)例,在這里是 GetMethod。在 GetMethod 的構(gòu)造函數(shù)中傳入待連接的地址

3. 調(diào)用第一步中創(chuàng)建好的實(shí)例的 execute 方法來(lái)執(zhí)行第二步中創(chuàng)建好的 method 實(shí)例

4. 讀 response

5. 釋放連接。無(wú)論執(zhí)行方法是否成功,都必須釋放連接

6. 對(duì)得到后的內(nèi)容進(jìn)行處理

根據(jù)以上步驟,我們來(lái)編寫(xiě)用GET方法來(lái)取得某網(wǎng)頁(yè)內(nèi)容的代碼。

  • 大部分情況下 HttpClient 默認(rèn)的構(gòu)造函數(shù)已經(jīng)足夠使用。
    HttpClient httpClient = new HttpClient();


  • 創(chuàng)建GET方法的實(shí)例。在GET方法的構(gòu)造函數(shù)中傳入待連接的地址即可。用GetMethod將會(huì)自動(dòng)處理轉(zhuǎn)發(fā)過(guò)程,如果想要把自動(dòng)處理 轉(zhuǎn)發(fā)過(guò)程去掉的話,可以調(diào)用方法setFollowRedirects(false)。
    GetMethod getMethod = new GetMethod("http://www.ibm.com/");


  • 調(diào)用實(shí)例httpClient的executeMethod方法來(lái)執(zhí)行g(shù)etMethod。由于是執(zhí)行在網(wǎng)絡(luò)上的程序,在運(yùn)行 executeMethod方法的時(shí)候,需要處理兩個(gè)異常,分別是HttpException和IOException。引起第一種異常的原因主要可能是 在構(gòu)造getMethod的時(shí)候傳入的協(xié)議不對(duì),比如不小心將"http"寫(xiě)成"htp",或者服務(wù)器端返回的內(nèi)容不正常等,并且該異常發(fā)生是不可恢復(fù) 的;第二種異常一般是由于網(wǎng)絡(luò)原因引起的異常,對(duì)于這種異常 (IOException),HttpClient會(huì)根據(jù)你指定的恢復(fù)策略自動(dòng)試著重新執(zhí)行executeMethod方法。HttpClient的恢復(fù) 策略可以自定義(通過(guò)實(shí)現(xiàn)接口HttpMethodRetryHandler來(lái)實(shí)現(xiàn))。通過(guò)httpClient的方法setParameter設(shè)置你實(shí) 現(xiàn)的恢復(fù)策略,本文中使用的是系統(tǒng)提供的默認(rèn)恢復(fù)策略,該策略在碰到第二類(lèi)異常的時(shí)候?qū)⒆詣?dòng)重試3次。executeMethod返回值是一個(gè)整數(shù),表示 了執(zhí)行該方法后服務(wù)器返回的狀態(tài)碼,該狀態(tài)碼能表示出該方法執(zhí)行是否成功、需要認(rèn)證或者頁(yè)面發(fā)生了跳轉(zhuǎn)(默認(rèn)狀態(tài)下GetMethod的實(shí)例是自動(dòng)處理跳 轉(zhuǎn)的)等。
    //設(shè)置成了默認(rèn)的恢復(fù)策略,在發(fā)生異常時(shí)候?qū)⒆詣?dòng)重試3次,在這里你也可以設(shè)置成自定義的恢復(fù)策略

    getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,

    new DefaultHttpMethodRetryHandler());

    //執(zhí)行g(shù)etMethod

    int statusCode = client.executeMethod(getMethod);

    if (statusCode != HttpStatus.SC_OK) {

    System.err.println("Method failed: " + getMethod.getStatusLine());

    }


  • 在返回的狀態(tài)碼正確后,即可取得內(nèi)容。取得目標(biāo)地址的內(nèi)容有三種方法:第一種,getResponseBody,該方法返回的是目標(biāo)的二進(jìn)制的byte 流;第二種,getResponseBodyAsString,這個(gè)方法返回的是String類(lèi)型,值得注意的是該方法返回的String的編碼是根據(jù)系 統(tǒng)默認(rèn)的編碼方式,所以返回的String值可能編碼類(lèi)型有誤,在本文的"字符編碼"部分中將對(duì)此做詳細(xì)介紹;第三 種,getResponseBodyAsStream,這個(gè)方法對(duì)于目標(biāo)地址中有大量數(shù)據(jù)需要傳輸是最佳的。在這里我們使用了最簡(jiǎn)單的 getResponseBody方法。
    byte[] responseBody = method.getResponseBody();


  • 釋放連接。無(wú)論執(zhí)行方法是否成功,都必須釋放連接。
    method.releaseConnection();


  • 處理內(nèi)容。在這一步中根據(jù)你的需要處理內(nèi)容,在例子中只是簡(jiǎn)單的將內(nèi)容打印到控制臺(tái)。
    System.out.println(new String(responseBody));


下面是程序的完整代碼,這些代碼也可在附件中的test.GetSample中找到。


package test;

import java.io.IOException;

import org.apache.commons.httpclient.*;

import org.apache.commons.httpclient.methods.GetMethod;

import org.apache.commons.httpclient.params.HttpMethodParams;

public class GetSample{

public static void main(String[] args) {

//構(gòu)造HttpClient的實(shí)例

HttpClient httpClient = new HttpClient();

//創(chuàng)建GET方法的實(shí)例

GetMethod getMethod = new GetMethod("http://www.ibm.com");

//使用系統(tǒng)提供的默認(rèn)的恢復(fù)策略

getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,

new DefaultHttpMethodRetryHandler());

try {

//執(zhí)行g(shù)etMethod

int statusCode = httpClient.executeMethod(getMethod);

if (statusCode != HttpStatus.SC_OK) {

System.err.println("Method failed: "

+ getMethod.getStatusLine());

}

//讀取內(nèi)容

byte[] responseBody = getMethod.getResponseBody();

//處理內(nèi)容

System.out.println(new String(responseBody));

} catch (HttpException e) {

//發(fā)生致命的異常,可能是協(xié)議不對(duì)或者返回的內(nèi)容有問(wèn)題

System.out.println("Please check your provided http address!");

e.printStackTrace();

} catch (IOException e) {

//發(fā)生網(wǎng)絡(luò)異常

e.printStackTrace();

} finally {

//釋放連接

getMethod.releaseConnection();

}

}

}


POST方法

根據(jù)RFC2616,對(duì)POST的解釋如下:POST方法用來(lái)向目的服務(wù)器發(fā)出請(qǐng)求,要求它接受被附在請(qǐng)求后的實(shí)體,并把它當(dāng)作請(qǐng)求隊(duì)列 (Request-Line)中請(qǐng)求URI所指定資源的附加新子項(xiàng)。POST被設(shè)計(jì)成用統(tǒng)一的方法實(shí)現(xiàn)下列功能:

  • 對(duì)現(xiàn)有資源的注釋?zhuān)ˋnnotation of existing resources)
  • 向電子公告欄、新聞組,郵件列表或類(lèi)似討論組發(fā)送消息
  • 提交數(shù)據(jù)塊,如將表單的結(jié)果提交給數(shù)據(jù)處理過(guò)程
  • 通過(guò)附加操作來(lái)擴(kuò)展數(shù)據(jù)庫(kù)

調(diào)用HttpClient中的PostMethod與GetMethod類(lèi)似,除了設(shè)置PostMethod的實(shí)例與GetMethod有些 不同之外,剩下的步驟都差不多。在下面的例子中,省去了與GetMethod相同的步驟,只說(shuō)明與上面不同的地方,并以登錄清華大學(xué)BBS為例子進(jìn)行說(shuō) 明。

  • 構(gòu)造PostMethod之前的步驟都相同,與GetMethod一樣,構(gòu)造PostMethod也需要一個(gè)URI參數(shù),在本例中,登錄 的地址是http://www.newsmth.net/bbslogin2.php。在創(chuàng)建了PostMethod的實(shí)例之后,需要給method實(shí)例 填充表單的值,在BBS的登錄表單中需要有兩個(gè)域,第一個(gè)是用戶(hù)名(域名叫id),第二個(gè)是密碼(域名叫passwd)。表單中的域用類(lèi) NameValuePair來(lái)表示,該類(lèi)的構(gòu)造函數(shù)第一個(gè)參數(shù)是域名,第二參數(shù)是該域的值;將表單所有的值設(shè)置到PostMethod中用方法 setRequestBody。另外由于BBS登錄成功后會(huì)轉(zhuǎn)向另外一個(gè)頁(yè)面,但是HttpClient對(duì)于要求接受后繼服務(wù)的請(qǐng)求,比如POST和 PUT,不支持自動(dòng)轉(zhuǎn)發(fā),因此需要自己對(duì)頁(yè)面轉(zhuǎn)向做處理。具體的頁(yè)面轉(zhuǎn)向處理請(qǐng)參見(jiàn)下面的"自動(dòng)轉(zhuǎn)向"部分。代碼如下:
    String url = "http://www.newsmth.net/bbslogin2.php";

    PostMethod postMethod = new PostMethod(url);

    // 填入各個(gè)表單域的值

    NameValuePair[] data = { new NameValuePair("id", "youUserName"),

    new NameValuePair("passwd", "yourPwd") };

    // 將表單的值放入postMethod中

    postMethod.setRequestBody(data);

    // 執(zhí)行postMethod

    int statusCode = httpClient.executeMethod(postMethod);

    // HttpClient對(duì)于要求接受后繼服務(wù)的請(qǐng)求,象POST和PUT等不能自動(dòng)處理轉(zhuǎn)發(fā)

    // 301或者302

    if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY ||

    statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {

    // 從頭中取出轉(zhuǎn)向的地址

    Header locationHeader = postMethod.getResponseHeader("location");

    String location = null;

    if (locationHeader != null) {

    location = locationHeader.getValue();

    System.out.println("The page was redirected to:" + location);

    } else {

    System.err.println("Location field value is null.");

    }

    return;

    }


完整的程序代碼請(qǐng)參見(jiàn)附件中的test.PostSample





回頁(yè)首


使用HttpClient過(guò)程中常見(jiàn)的一些問(wèn)題

下面介紹在使用HttpClient過(guò)程中常見(jiàn)的一些問(wèn)題。

字符編碼

某目標(biāo)頁(yè)的編碼可能出現(xiàn)在兩個(gè)地方,第一個(gè)地方是服務(wù)器返回的http頭中,另外一個(gè)地方是得到的html/xml頁(yè)面中。

  • 在http頭的Content-Type字段可能會(huì)包含字符編碼信息。例如可能返回的頭會(huì)包含這樣子的信息:Content-Type: text/html; charset=UTF-8。這個(gè)頭信息表明該頁(yè)的編碼是UTF-8,但是服務(wù)器返回的頭信息未必與內(nèi)容能匹配上。比如對(duì)于一些雙字節(jié)語(yǔ)言國(guó)家,可能服務(wù) 器返回的編碼類(lèi)型是UTF-8,但真正的內(nèi)容卻不是UTF-8編碼的,因此需要在另外的地方去得到頁(yè)面的編碼信息;但是如果服務(wù)器返回的編碼不是UTF- 8,而是具體的一些編碼,比如gb2312等,那服務(wù)器返回的可能是正確的編碼信息。通過(guò)method對(duì)象的getResponseCharSet()方 法就可以得到http頭中的編碼信息。
  • 對(duì)于象xml或者h(yuǎn)tml這樣的文件,允許作者在頁(yè)面中直接指定編碼類(lèi)型。比如在html中會(huì)有<meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>這樣的標(biāo)簽;或者在xml中會(huì)有<?xml version="1.0" encoding="gb2312"?>這樣的標(biāo)簽,在這些情況下,可能與http頭中返回的編碼信息沖突,需要用戶(hù)自己判斷到底那種編碼類(lèi)型應(yīng)該 是真正的編碼。

自動(dòng)轉(zhuǎn)向

根據(jù)RFC2616中對(duì)自動(dòng)轉(zhuǎn)向的定義,主要有兩種:301和302。301表示永久的移走(Moved Permanently),當(dāng)返回的是301,則表示請(qǐng)求的資源已經(jīng)被移到一個(gè)固定的新地方,任何向該地址發(fā)起請(qǐng)求都會(huì)被轉(zhuǎn)到新的地址上。302表示暫時(shí) 的轉(zhuǎn)向,比如在服務(wù)器端的servlet程序調(diào)用了sendRedirect方法,則在客戶(hù)端就會(huì)得到一個(gè)302的代碼,這時(shí)服務(wù)器返回的頭信息中 location的值就是sendRedirect轉(zhuǎn)向的目標(biāo)地址。

HttpClient支持自動(dòng)轉(zhuǎn)向處理,但是象POST和PUT方式這種要求接受后繼服務(wù)的請(qǐng)求方式,暫時(shí)不支持自動(dòng)轉(zhuǎn)向,因此如果碰到 POST方式提交后返回的是301或者302的話需要自己處理。就像剛才在POSTMethod中舉的例子:如果想進(jìn)入登錄BBS后的頁(yè)面,必須重新發(fā)起 登錄的請(qǐng)求,請(qǐng)求的地址可以在頭字段location中得到。不過(guò)需要注意的是,有時(shí)候location返回的可能是相對(duì)路徑,因此需要對(duì) location返回的值做一些處理才可以發(fā)起向新地址的請(qǐng)求。

另外除了在頭中包含的信息可能使頁(yè)面發(fā)生重定向外,在頁(yè)面中也有可能會(huì)發(fā)生頁(yè)面的重定向。引起頁(yè)面自動(dòng)轉(zhuǎn)發(fā)的標(biāo)簽是:<meta http-equiv="refresh" content="5; url=http://www.ibm.com/us">。如果你想在程序中也處理這種情況的話得自己分析頁(yè)面來(lái)實(shí)現(xiàn)轉(zhuǎn)向。需要注意的是,在上面那 個(gè)標(biāo)簽中url的值也可以是一個(gè)相對(duì)地址,如果是這樣的話,需要對(duì)它做一些處理后才可以轉(zhuǎn)發(fā)。

處理HTTPS協(xié)議

HttpClient提供了對(duì)SSL的支持,在使用SSL之前必須安裝JSSE。在Sun提供的1.4以后的版本中,JSSE已經(jīng)集成到 JDK中,如果你使用的是JDK1.4以前的版本則必須安裝JSSE。JSSE不同的廠家有不同的實(shí)現(xiàn)。下面介紹怎么使用HttpClient來(lái)打開(kāi) Https連接。這里有兩種方法可以打開(kāi)https連接,第一種就是得到服務(wù)器頒發(fā)的證書(shū),然后導(dǎo)入到本地的keystore中;另外一種辦法就是通過(guò)擴(kuò) 展HttpClient的類(lèi)來(lái)實(shí)現(xiàn)自動(dòng)接受證書(shū)。

方法1,取得證書(shū),并導(dǎo)入本地的keystore:

  • 安裝JSSE (如果你使用的JDK版本是1.4或者1.4以上就可以跳過(guò)這一步)。本文以IBM的JSSE為例子說(shuō)明。先到IBM網(wǎng)站上下載JSSE的安裝包。然后解 壓開(kāi)之后將ibmjsse.jar包拷貝到<java-home>"lib"ext"目錄下。
  • 取得并且導(dǎo)入證書(shū)。證書(shū)可以通過(guò)IE來(lái)獲得:

    1. 用IE打開(kāi)需要連接的https網(wǎng)址,會(huì)彈出如下對(duì)話框:



    2. 單擊"View Certificate",在彈出的對(duì)話框中選擇"Details",然后再單擊"Copy to File",根據(jù)提供的向?qū)纱L問(wèn)網(wǎng)頁(yè)的證書(shū)文件



    3. 向?qū)У谝徊剑瑲g迎界面,直接單擊"Next",



    4. 向?qū)У诙剑x擇導(dǎo)出的文件格式,默認(rèn),單擊"Next",



    5. 向?qū)У谌剑斎雽?dǎo)出的文件名,輸入后,單擊"Next",



    6. 向?qū)У谒牟剑瑔螕?Finish",完成向?qū)?/p>

    7. 最后彈出一個(gè)對(duì)話框,顯示導(dǎo)出成功



  • 用keytool工具把剛才導(dǎo)出的證書(shū)倒入本地keystore。Keytool命令在<java-home>"bin "下,打開(kāi)命令行窗口,并到<java-home>"lib"security"目錄下,運(yùn)行下面的命令:

    keytool -import -noprompt -keystore cacerts -storepass changeit -alias yourEntry1 -file your.cer


    其中參數(shù)alias后跟的值是當(dāng)前證書(shū)在keystore中的唯一標(biāo)識(shí)符,但是大小寫(xiě)不區(qū)分;參數(shù)file后跟的是剛才通過(guò)IE導(dǎo)出的證 書(shū)所在的路徑和文件名;如果你想刪除剛才導(dǎo)入到keystore的證書(shū),可以用命令:

    keytool -delete -keystore cacerts -storepass changeit -alias yourEntry1


  • 寫(xiě)程序訪問(wèn)https地址。如果想測(cè)試是否能連上https,只需要稍改一下GetSample例子,把請(qǐng)求的目標(biāo)變成一個(gè)https地 址。
    GetMethod getMethod = new GetMethod("https://www.yourdomain.com");


    運(yùn)行該程序可能出現(xiàn)的問(wèn)題:

    1. 拋出異常java.net.SocketException: Algorithm SSL not available。出現(xiàn)這個(gè)異常可能是因?yàn)闆](méi)有加JSSEProvider,如果用的是IBM的JSSE Provider,在程序中加入這樣的一行:

     if(Security.getProvider("com.ibm.jsse.IBMJSSEProvider") == null)

    Security.addProvider(new IBMJSSEProvider());


    或者也可以打開(kāi)<java-home>"lib"security"java.security,在行

    security.provider.1=sun.security.provider.Sun

    security.provider.2=com.ibm.crypto.provider.IBMJCE


    后面加入security.provider.3=com.ibm.jsse.IBMJSSEProvider

    2. 拋出異常java.net.SocketException: SSL implementation not available。出現(xiàn)這個(gè)異常可能是你沒(méi)有把ibmjsse.jar拷貝到<java-home>"lib"ext"目錄下。

    3. 拋出異常javax.net.ssl.SSLHandshakeException: unknown certificate。出現(xiàn)這個(gè)異常表明你的JSSE應(yīng)該已經(jīng)安裝正確,但是可能因?yàn)槟銢](méi)有把證書(shū)導(dǎo)入到當(dāng)前運(yùn)行JRE的keystore中,請(qǐng)按照前 面介紹的步驟來(lái)導(dǎo)入你的證書(shū)。

方法2,擴(kuò)展HttpClient類(lèi)實(shí)現(xiàn)自動(dòng)接受證書(shū)

因?yàn)檫@種方法自動(dòng)接收所有證書(shū),因此存在一定的安全問(wèn)題,所以在使用這種方法前請(qǐng)仔細(xì)考慮您的系統(tǒng)的安全需求。具體的步驟如下:

  • 提供一個(gè)自定義的socket factory(test.MySecureProtocolSocketFactory)。這個(gè)自定義的類(lèi)必須實(shí)現(xiàn)接口 org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory,在實(shí)現(xiàn)接口 的類(lèi)中調(diào)用自定義的X509TrustManager(test.MyX509TrustManager),這兩個(gè)類(lèi)可以在隨本文帶的附件中得到
  • 創(chuàng)建一個(gè)org.apache.commons.httpclient.protocol.Protocol的實(shí)例,指定協(xié)議名稱(chēng)和默認(rèn) 的端口號(hào)
    Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory (), 443);


  • 注冊(cè)剛才創(chuàng)建的https協(xié)議對(duì)象
    Protocol.registerProtocol("https ", myhttps);


  • 然后按照普通編程方式打開(kāi)https的目標(biāo)地址,代碼請(qǐng)參見(jiàn)test.NoCertificationHttpsGetSample

處理代理服務(wù)器

HttpClient中使用代理服務(wù)器非常簡(jiǎn)單,調(diào)用HttpClient中setProxy方法就可以,方法的第一個(gè)參數(shù)是代理服務(wù)器地 址,第二個(gè)參數(shù)是端口號(hào)。另外HttpClient也支持SOCKS代理。


httpClient.getHostConfiguration().setProxy(hostName,port);






回頁(yè)首


結(jié)論

從上面的介紹中,可以知道HttpClient對(duì)http協(xié)議支持非常好,使用起來(lái)很簡(jiǎn)單,版本更新快,功能也很強(qiáng)大,具有足夠的靈活性和擴(kuò) 展性。對(duì)于想在Java應(yīng)用中直接訪問(wèn)http資源的編程人員來(lái)說(shuō),HttpClient是一個(gè)不可多得的好工具。



參考資料

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

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

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

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

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

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

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


小菜毛毛 2010-04-09 14:38 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 鹿泉市| 九江市| 江津市| 高清| 弋阳县| 晋城| 灵宝市| 鹤庆县| 利辛县| 永川市| 黔西| 济源市| 香格里拉县| 芦溪县| 夏津县| 陆川县| 长顺县| 金昌市| 绵竹市| 湛江市| 普宁市| 芒康县| 长沙县| 靖安县| 神池县| 呼和浩特市| 宁都县| 云霄县| 维西| 禹州市| 包头市| 崇左市| 延吉市| 元谋县| 宁波市| 炉霍县| 吴忠市| 涟水县| 肇庆市| 临洮县| 阿克|