HttpClientでexecuteがフリーズする現象
HttpClientでexecuteを繰り返し実行していると、フリーズしてしまいプログラムが動作しなくなるという現象が発生しました。いろいろ原因を調べてみたところ、executeの実行後にはreleaseConnectionの実行が必要みたいです。
private String getContents(String url) { String contents = ""; HttpGet get = new HttpGet(url); String encode = ""; try { HttpResponse response = httpClient.execute(get); // ヘッダからエンコード形式を取得 Header[] header = response.getAllHeaders(); for (int i = 0; i < header.length; i++) { if (header[i].getName().compareToIgnoreCase("Content-Type") == 0) { if (header[i].getValue().toLowerCase().indexOf("shift_jis") != -1) encode = "MS932"; if (header[i].getValue().toLowerCase().indexOf("euc") != -1) encode = "EUC-JP"; if (header[i].getValue().toLowerCase().indexOf("utf-8") != -1) encode = "UTF-8"; //if (header[i].getValue().indexOf("UTF-8") != -1) encode = "UTF-8"; //System.out.println(header[i].getValue()); } } // エンコード形式が特定できた場合のみ if (encode.length() > 0) { String html = EntityUtils.toString(response.getEntity(), encode); Document doc = Jsoup.parse(html); contents = doc.text(); } get.releaseConnection(); // とても重要 } catch (Exception e) { e.printStackTrace(); } return contents; }
こんな感じにしないとダメみたいです。
自動で開放してくれればいいのに。