所以,我得出结论,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库有点过于冗长了,而且它的jar文件大小高达700KB。不过别管那么多,我想知道大家使用其他HTTP客户端库的经验如何?
我知道的一些库有:Jetty、hotpotato 和 AsyncHttpClient。
我主要是想在服务器端执行许多并发获取和大文件传输时获得更好的性能。你们有什么推荐吗?
附注:我知道旧版本的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发布以来,但它对我来说根本不起作用。