2011/04/18

Android - HTTP-POST通信を行う

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

/**
 * HTTP POSTを行う
 *
 * @param url HTTP通信を行うターゲットのURL
 * @param requestParams パラメータ
 * @param encode HTTP要求時の文字コード
 * @return 受信結果の文字列
 */
public String httpPostRequest( String url, Map<String, String> requestParams, String encode ){
 try{        
  HttpPost httppost = new HttpPost( url );
     DefaultHttpClient client = new DefaultHttpClient();
 
     // リクエストパラメータの設定
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        for (Map.Entry<String, String> entry : requestParams.entrySet()) {
            params.add(new BasicNameValuePair((String) entry.getKey(), (String) entry.getValue()));
        }
 
     // POST データの設定
     httppost.setEntity(new UrlEncodedFormEntity(params, encode));

     HttpResponse response = client.execute( httppost );
     int status = response.getStatusLine().getStatusCode();
 
     // 結果が正しく帰って来なければエラー
     if ( status != HttpStatus.SC_OK ){ throw new Exception( "" ); }
 
     return EntityUtils.toString( response.getEntity());
 }catch ( Exception e ){
  return null;
 }
}


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

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

0 コメント:

コメントを投稿

 
;