nighty

          折騰的年華
          posts - 37, comments - 143, trackbacks - 0, articles - 0

          httpclient3.1使用小結

          Posted on 2008-06-11 15:18 寒武紀 閱讀(6929) 評論(8)  編輯  收藏 所屬分類: Java

          Jakarta的httpclient3.1是最新版本,項目中需要用程序模擬瀏覽器的GET和POST動作。在使用過程中遇到不少問題。
          1. 帶附件的POST提交
              最開始都是使用MultipartPostMethod這個類,現在已經廢棄這個類了。API說明:Deprecated. Use MultipartRequestEntity in conjunction with PostMethod instead.   使用PostMethod可以實現的功能,就沒有必要再弄一個MultipartPostMethod了。下面是一段最簡單的示例:

          PostMethod post = new PostMethod();
                  NameValuePair[] pairs 
          = new NameValuePair[2];
                  pairs[
          0= new NameValuePair("para1""value1");
                  pairs[
          0= new NameValuePair("para2""value2");
                  post.setRequestBody(pairs);
                  HttpClient client 
          = new HttpClient();
                  
          try {
                      client.executeMethod(post);
                  }
           catch (HttpException e) {
                      e.printStackTrace();
                  }
           catch (IOException e) {
                      e.printStackTrace();
                  }
             這是針對一般的form形式的提交,而且這個form里面不帶附件的。如果帶附件,那么這種方法就不起作用,附件上傳的參數和普通參數無法一同在服務器獲取到。org.apache.commons.httpclient.methods.multipart 這個包就是為處理文件上傳這種多形式參數的情況的。最主要的類是Part(代表一種post object),它有二個比較重要的子類:FilePart和StringPart,一個是文件的參數,另一個就是普通的文本參數。它的典型使用方法如下:
          String url = "http://localhost:8080/HttpTest/Test";
                   PostMethod postMethod 
          = new PostMethod(url);
                   
                   StringPart sp 
          = new StringPart("TEXT""testValue");
                   FilePart fp 
          = new FilePart("file""test.txt"new File("./temp/test.txt"));
                   
                   MultipartRequestEntity mrp
          = new MultipartRequestEntity(new Part[]{sp, fp}, postMethod
                           .getParams());
                   postMethod.setRequestEntity(mrp);
                   
                   
          //執行postMethod
                   HttpClient httpClient = new HttpClient();
                   
          try {
                      httpClient.executeMethod(postMethod);
                  }
           catch (HttpException e) {
                      e.printStackTrace();
                  }
           catch (IOException e) {
                      e.printStackTrace();
                  }
              在第二行PostMethod postMethod = new PostMethod();后面,有人說需要使用postMehtod.setRequestHeader("Content-type", "multipart/form-data"); Content-type的請求類型進行更改。但是我在使用過程沒有加上這一句,查了一下httpCleint的默認Content-type是application/octet-stream。應該是沒有影響的。對于MIME類型的請求,httpclient建議全用MulitPartRequestEntity進行包裝,就是上面的用法。

          2.  參數中文的處理問題
              httpclient的默認編碼都是ISO-8859-1,那肯定就無法支持中文參數了。引用一下這篇文章:http://thinkbase.net/w/main/Wiki?HttpClient+POST+%E7%9A%84+UTF-8+%E7%BC%96%E7%A0%81%E9%97%AE%E9%A2%98 ,按照作者的說法,就可以正常解決中文編碼的問題。其中最關鍵的是修改EncodingUtil這個類的一個方法實現。另外,FilePart和StringPart的構造方法都有一個帶編碼指定的參數,為了減少問題的出現,建議所有的都帶上統一的編碼,包括postMethod.getParams()。示例如下:
          String url = "http://localhost:8080/HttpTest/Test";
                   PostMethod postMethod 
          = new PostMethod(url);
                   
                   StringPart sp 
          = new StringPart("TEXT""testValue""GB2312");
                   FilePart fp 
          = new FilePart("file""test.txt"new File("./temp/test.txt"), null"GB2312");
                   
                   postMethod.getParams().setContentCharset(
          "GB2312");
                   MultipartRequestEntity mrp
          = new MultipartRequestEntity(new Part[]{sp, fp}, postMethod
                           .getParams());
                   postMethod.setRequestEntity(mrp);
                   
                   
          //執行postMethod
                   HttpClient httpClient = new HttpClient();
                   
          try {
                      httpClient.executeMethod(postMethod);
                  }
           catch (HttpException e) {
                      e.printStackTrace();
                  }
           catch (IOException e) {
                      e.printStackTrace();
                  }



          剛進場的時候戲就落幕

          Feedback

          # re: httpclient3.1使用小結  回復  更多評論   

          2008-06-13 15:49 by ~上善若水~
          傳智播客ajax全套內部視頻獨家發布,免費下載

          1.ajax 入門

          2.ajax 原理

          3.ajax 簡單實例

          4.ajax 無限級聯動菜單

          5.ajax 簡易聊天室

          6.ajax 開源框架簡介

          7.DWR 框架源碼分析一

          8.DWR 框架源碼分析二

          9.DWR 框架源碼分析三

          10.DWR 框架源碼分析四

          11.DWR框架源碼分析五

          12.SSH + DWR完成商城驅動

          13. Extjs 簡介

          14 Extjs  簡單實例

          15.SSH + Extjs 開發系列之OA一

          16. SSH + Extjs 開發系列之OA二

          17. SSH + Extjs 開發系列之OA三

          18. SSH + Extjs 開發系列之OA四

          19 .SSH + Extjs 開發系列之OA五

          20. SSH + Extjs 開發系列之OA六

          21. SSH + Extjs 開發系列之OA七

          22. SSH + Extjs 開發系列之OA八

          23.SSH + Extjs 開發系列之OA九

          24.SSH + Extjs 開發系列之OA十

          25. ajax 前景之我見

          下載地址:http://www.ibeifeng.com/read.php?tid=2338&u=5043

          # re: httpclient3.1使用小結  回復  更多評論   

          2008-09-05 13:49 by HttpClient

          標題 請輸入標題
          姓名 請輸入你的姓名
          主頁
          請輸入驗證碼
          驗證碼 *

          內容(請不要發表任何與政治相關的內容) 請輸入評論內容


          Remember Me?
          登錄 使用高級評論 新用戶注冊 返回頁首 恢復上次提交
          [使用Ctrl+Enter鍵可以直接提交]




          相關鏈接:
          怎么優化使用asp.net ajax的網站速度
          碰到技術難題?馬上使用找找看!
          如何使用Div+CSS布局?
          淘金高階4級全真試題(2002.1--2007.12)13套題(MP3版)

          # Seo News  回復  更多評論   

          2009-05-18 10:05 by Seo News
          Hello everyone. Looks are part of business. A businessman should never stand out more than his customers. His mannerisms, his clothes, everything about him... Moderation is the key.
          I am from Barbados and , too, and now am writing in English, give true I wrote the following sentence: "Professional seo services increase natural rankings.Webmarketing is a california seo search engine optimization company with offices in san francisco los angeles offering seo search engine."

          Thanks for the help ;-), Kristin.

          # re: httpclient3.1使用小結  回復  更多評論   

          2010-10-23 15:28 by 張路
          http://www.aygfsteel.com/nighty/archive/2008/06/11/207121.htm

          # shi  回復  更多評論   

          2010-11-09 16:29 by uk dress
          too, and now am writing in English, give true I wrote the following sentence: "Professional seo services increase natural rankings.Webmarketing is a california seo search engine optimization company with offices in san francisco los angeles offering seo search engine."

          # tag heuer replica  回復  更多評論   

          2011-01-07 10:29 by tag heuer replica
          In 1990, the john henry has tortuous lavish re-birth when ponderous was registered further.

          # re: httpclient3.1使用小結  回復  更多評論   

          2011-05-24 14:11 by hair extensions
          I like it, I learned something today! Thanks!

          # shox r2  回復  更多評論   

          2011-06-02 14:29 by shox r2
          ok,i know.
          主站蜘蛛池模板: 靖西县| 马公市| 衢州市| 蕲春县| 广饶县| 巴东县| 珲春市| 南昌市| 绩溪县| 叙永县| 延安市| 富平县| 石嘴山市| 榕江县| 凤庆县| 石城县| 通州区| 澄迈县| 当涂县| 彝良县| 秦皇岛市| 都匀市| 凤山市| 黄山市| 祁东县| 昭觉县| 南丰县| 台山市| 独山县| 禄丰县| 马龙县| 高雄市| 庄河市| 连山| 麻阳| 石渠县| 柳江县| 奉贤区| 彭阳县| 建湖县| 同仁县|