Итак, я пришел к выводу, что Apache HttpComponents 4 является одним из самых перегруженных API, с которыми я когда-либо сталкивался. Вещи, которые кажутся похожими на них, должны быть простыми, принимают сотни строк кода (и я все еще не уверен, что ресурсы очищаются правильно).
Плюс он хочет, чтобы я делал такие вещи, как:
List<NameValuePair> qparams = new ArrayList<NameValuePair>();
qparams.add(new BasicNameValuePair("q", "httpclient"));
qparams.add(new BasicNameValuePair("btnG", "Google Search"));
qparams.add(new BasicNameValuePair("aq", "f"));
qparams.add(new BasicNameValuePair("oq", null));
URI uri = URIUtils.createURI("http", "www.google.com", -1, "/search",
URLEncodedUtils.format(qparams, "UTF-8"), null);
Который, просто... нет. Я знаю это Java, и мы не занимаемся всей краткостью, но это немного. Не говоря уже о банках до 700 КБ.
В любом случае, достаточно рассказать, я хотел посмотреть, какие впечатления у людей были с другими клиентскими библиотеками HTTP?
Я знаю: Jetty, hotpotato и AsyncHttpClient.
Это для использования на стороне сервера, меня больше всего интересует производительность для многих одновременных попыток и больших передач файлов.
Любые рекомендации?
PS Я знаю, что почтенный HttpClient 3.1 все еще существует, но я бы хотел использовать что-то, что поддерживалось.
Update
@oleg: это то, что предлагают документы:
HttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet("http://www.apache.org/");
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
try {
instream.read();
} catch (IOException ex) {
throw ex;
} catch (RuntimeException ex) {
httpget.abort();
throw ex;
} finally {
try { instream.close(); } catch (Exception ignore) {}
}
}
} finally {
httpclient.getConnectionManager().shutdown();
}
Я все еще получаю непредвиденные ошибки при потреблении контента объекта при использовании ThreadSafeClientConnManager
. Я уверен, что это моя вина, но на данный момент я действительно не хочу это выяснять.
Эй, я не собираюсь пренебрегать работой здесь, но я старался использовать HttpComponents с тех пор, как вышел 4.0, и это просто не работает для меня.