2015年7月7日 星期二

Java - 在HttpGet及HttpPost中塞入資料參數的方法

當我們想用HttpClient的方式進行HttpGet及HttpPost連線時,常會需要在其中放入一些資料參數,在這邊紀錄整理了一些個人覺得不錯的、如何向連線放入參數的方法:

HttpGet:
HttpGet的參數都是放在Url後面的,例如"http://XXX.XXX.XXX.XXX?param1=1&param2=2",所以我們的目標就是創造出帶有參數的Url即可。
參考資料:How to add parameters to a HTTP GET request in Android?

  1. 最簡單的方式就是手動在HttpGet的Url後面加上要的參數資料(限文字),例如直接自行組合字串:
  2. String url = "http://XXX.XXX.XXX.XXX?" + "param1=" + param1 + "&param2=" + param2;
    
    
  3. 使用URIBuilder來幫助我們產生Uri:
  4. URI uri = new URIBuilder("http://XXX.XXX.XXX.XXX:8080/path1/path2/xxx.jsp")
        .addParameter("param1", param1)
        .addParameter("param2", param2)
        .addParameters(listOfParameters)  //如果參數以NamerValuePair放在
        //List<NameValuePair>中的話可以
        //使用addParameters()
        .build();
    
    以上也可也拆成多個方法變成如下的樣子:
    URI uri = new URIBuilder()
        .setScheme("http")
        .setHost("XXX.XXX.XXX.XXX")
        .setPort(8080)
        .setPath("/path1/path2/xxx.jsp")
        .addParameter("param1", param1)
        .addParameter("param2", param2)
        .addParameters(listOfParameters)
        .build();
    
    要注意如果要傳中文等的資料的話,不要忘記對資料進行編碼動作,例如:
    URLEncoder.encode(param1, "UTF-8")
    
HttpPost:
HttpPost的參數都是放在Entity中的,所以我們只要用List<NameValuePair>的型式把資料放到HttpPost的Entity中就行了。
參考資料:How to add parameters to a HTTP GET request in Android?

String url = "http://XXX.XXX.XXX.XXX:8080/path1/path2/xxx.jsp";
//建立HttpClient
DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
//建立HttpPost
HttpPost httpPost = new HttpPost( url ) ;
//建立要送的資料參數
ArrayList<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>( );
params.add ( new BasicNameValuePair ( "param1" , param1 ) ) ;
params.add ( new BasicNameValuePair ( "param2" , param2 ) ) ;
//將資料參數放到HttpPost的Entity裡面,並指定編碼
httpPost .setEntity ( new UrlEncodedFormEntity ( params , HTTP.UTF_8 ) );
//Execute連線發送訊息並取得回應
HttpResponse response = defaultHttpClient.execute ( httpPost ) 
或是使用PostMethod
final HttpClient client = new HttpClient();
final PostMethod postMethod = new PostMethod("http://XXX.XXX.XXX.XXX:8080/path1/path2/xxx.jsp");
postMethod.addParameter("param1", param1);
postMethod.addParameter("param2", param2);
int statusCode = client.executeMethod(postMethod);
System.out.println(postMethod.getStatusLine());

沒有留言 :

張貼留言