HttpClient的使用

一、簡介

HttpClient是Apache Jakarta Common下的子項(xiàng)目,用來提供高效的、最新的、功能豐富的支持HTTP協(xié)議的客戶端編程工具包,并且它支持HTTP協(xié)議最新的版本和建議。HttpClient已經(jīng)應(yīng)用在很多的項(xiàng)目中,比如Apache Jakarta上很著名的另外兩個開源項(xiàng)目Cactus和HTMLUnit都使用了HttpClient。

二、特性

  1. 基于標(biāo)準(zhǔn)、純凈的java語言。實(shí)現(xiàn)了Http1.0和Http1.1
  2. 以可擴(kuò)展的面向?qū)ο蟮慕Y(jié)構(gòu)實(shí)現(xiàn)了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
  3. 支持HTTPS協(xié)議。
  4. 通過Http代理建立透明的連接。
  5. 利用CONNECT方法通過Http代理建立隧道的https連接。
  6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認(rèn)證方案。
  7. 插件式的自定義認(rèn)證方案。
  8. 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。
  9. 連接管理器支持多線程應(yīng)用。支持設(shè)置最大連接數(shù),同時支持設(shè)置每個主機(jī)的最大連接數(shù),發(fā)現(xiàn)并關(guān)閉過期的連接。
  10. 自動處理Set-Cookie中的Cookie。
  11. 插件式的自定義Cookie策略。
  12. Request的輸出流可以避免流中內(nèi)容直接緩沖到socket服務(wù)器。
  13. Response的輸入流可以有效的從socket服務(wù)器直接讀取相應(yīng)內(nèi)容。
  14. 在http1.0和http1.1中利用KeepAlive保持持久連接。
  15. 直接獲取服務(wù)器發(fā)送的response code和 headers。
  16. 設(shè)置連接超時的能力。
  17. 實(shí)驗(yàn)性的支持http1.1 response caching。
  18. 源代碼基于Apache License 可免費(fèi)獲取。

三、使用

使用HttpClient發(fā)送請求、接收響應(yīng)很簡單,一般需要如下幾步即可。

  1. 創(chuàng)建HttpClient對象。
  2. 創(chuàng)建請求方法的實(shí)例,并指定請求URL。如果需要發(fā)送GET請求,創(chuàng)建HttpGet對象;如果需要發(fā)送POST請求,創(chuàng)建HttpPost對象。
  3. 如果需要發(fā)送請求參數(shù),可調(diào)用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數(shù);對于HttpPost對象而言,也可調(diào)用setEntity(HttpEntity entity)方法來設(shè)置請求參數(shù)。
  4. 調(diào)用HttpClient對象的execute(HttpUriRequest request)發(fā)送請求,該方法返回一個HttpResponse。
  5. 調(diào)用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取服務(wù)器的響應(yīng)頭;調(diào)用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了服務(wù)器的響應(yīng)內(nèi)容。程序可通過該對象獲取服務(wù)器的響應(yīng)內(nèi)容。
  6. 釋放連接。無論執(zhí)行方法是否成功,都必須釋放連接

Get請求使用方法

    public void get(View view) {
        new Thread() {
            public void run() {
                try {
                    // 創(chuàng)建請求發(fā)送對象HttpClient
                    HttpClient client = new DefaultHttpClient();
                    // 創(chuàng)建get
                    String url = "http://www.baidu.com";
                    HttpGet get = new HttpGet(url);
                    // 服務(wù)端返回數(shù)據(jù)
                    HttpResponse response = client.execute(get);// 發(fā)送 沒有封裝線程的對象
                                                                // 就不需要回調(diào)
                    InputStream input = response.getEntity().getContent();
                    byte[] data = StreamUtils.readInputStream(input);
                    String result = new String(data, "utf-8");
                    Log.i("wzx", result);
                    input.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            };
        }.start();
    }

Psot()

public void post(View view) {

        new Thread() {
            public void run() {
                try {
                    // 創(chuàng)建請求發(fā)送對象HttpClient
                    HttpClient client = new DefaultHttpClient();
                    // 創(chuàng)建post
                    String url = "http://192.168.32.10:8080/web/LoginServlet";
                    HttpPost post = new HttpPost(url);
                    
                    // 變量  NameValuePair:Map.Entry
                    NameValuePair username = new BasicNameValuePair("username", "中國ujj");
                    NameValuePair passowrd = new BasicNameValuePair("password", "中國ujj");
                    
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(username);
                    params.add(passowrd);
                    
                    UrlEncodedFormEntity form = new UrlEncodedFormEntity(params, "utf-8");
                    post.setEntity(form);// 添加表單到請求里,帶到服務(wù)端
                    // 服務(wù)端返回數(shù)據(jù)
                    HttpResponse response = client.execute(post);// 發(fā)送 沒有封裝線程的對象
                    InputStream input = response.getEntity().getContent();
                    byte[] data = StreamUtils.readInputStream(input);
                    String result = new String(data, "utf-8");
                    Log.i("wzx", result);
                    input.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            };
        }.start();
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容