Итак, я пришел к выводу, что 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?
Мне известны следующие сообщения: Причал , hotpotato и AsyncHttpClient .
Это для использования на стороне сервера, меня больше всего интересует производительность для многих одновременных операций получения и передачи больших файлов.
Есть рекомендации?
PS Я знаю, что почтенный HttpClient 3.1 все еще там, но я хотел бы использовать кое-что, что поддерживается.
Обновление
@ 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, и это просто не работает для меня.