2011/04/18

Android - HTTP-POST通信を行う

HTTPのPOST処理を行う場合は, 以下のようにすればOK.

  1. /** 
  2.  * HTTP POSTを行う 
  3.  * 
  4.  * @param url HTTP通信を行うターゲットのURL 
  5.  * @param requestParams パラメータ 
  6.  * @param encode HTTP要求時の文字コード 
  7.  * @return 受信結果の文字列 
  8.  */  
  9. public String httpPostRequest( String url, Map<String, String> requestParams, String encode ){  
  10.  try{          
  11.   HttpPost httppost = new HttpPost( url );  
  12.      DefaultHttpClient client = new DefaultHttpClient();  
  13.    
  14.      // リクエストパラメータの設定  
  15.         List<NameValuePair> params = new ArrayList<NameValuePair>();  
  16.         for (Map.Entry<String, String> entry : requestParams.entrySet()) {  
  17.             params.add(new BasicNameValuePair((String) entry.getKey(), (String) entry.getValue()));  
  18.         }  
  19.    
  20.      // POST データの設定  
  21.      httppost.setEntity(new UrlEncodedFormEntity(params, encode));  
  22.   
  23.      HttpResponse response = client.execute( httppost );  
  24.      int status = response.getStatusLine().getStatusCode();  
  25.    
  26.      // 結果が正しく帰って来なければエラー  
  27.      if ( status != HttpStatus.SC_OK ){ throw new Exception( "" ); }  
  28.    
  29.      return EntityUtils.toString( response.getEntity());  
  30.  }catch ( Exception e ){  
  31.   return null;  
  32.  }  
  33. }  


POST データを付加する際,
httppost.setEntity(new UrlEncodedFormEntity(params, encode));
とするが, ここで第二引数に, ちゃんと encode を指定してあげること。
内部エンコードがUTF-8だろうからって指定しなかったために、えらい目に会いました。

Webプログラム (PHP等) でもそうだけど、文字コードは明示的にちゃんと指定してあげなきゃだめですね。猛省。。。

0 コメント:

コメントを投稿

 
;