Apache HttpClient で文字コードを指定する方法です。
#例は Post です。
public class PostTest { private CloseableHttpClient httpclient; public PostTest() { httpclient = HttpClients.createDefault(); } public String post(String url, List<NameValuePair> nvps, String charsetName) throws ClientProtocolException, IOException { Charset charset = Charset.forName(charsetName); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(nvps, charset)); CloseableHttpResponse response = httpclient.execute(httpPost); try { HttpEntity entity = response.getEntity(); String html = EntityUtils.toString(entity, charset); EntityUtils.consume(entity); return html; } finally { response.close(); } }
}
ソース中の
Charset charset = Charset.forName(charsetName);のところでリクエストの文字コードを指定しています。
new UrlEncodedFormEntity(nvps, charset)
レスポンスの文字コードは
EntityUtils.toString(entity, charset)で指定しています。
post() の引数は、
url に 対象 URL を、
charsetName に文字コードを指定します。
nvps はパラメータです。次のように指定します。
nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("param1", "value1"));
nvps.add(new BasicNameValuePair("param2", "value2"));
nvps.add(new BasicNameValuePair("param3", "value3"));
ちなみにクラスとして作って
CloseableHttpClient をインスタンス変数に持たせているのは
HttpClient に cookie 等を覚えてもらうためです。
これにより Post() を連続呼び出ししてもセッションなどが管理されます。
(このあたりは色々な書き方ができるようになっています。
本格的に使う場合は公式のドキュメントを参照してください。
※個人的には書き方が色々ありすぎて混乱気味ですが。)
追記
この PostTest クラスには close 処理が漏れていました。
もしご利用の際は下記を追加して finally などで呼び出してください。
public void close() throws IOException {
httpclient.close();
}