【发布时间】:2011-03-24 05:23:48
【问题描述】:
所以,我得出的结论是 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。
这是供服务器端使用的,我最感兴趣的是许多并发获取和大文件传输的性能。
有什么建议吗?
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 时使用实体内容时,我仍然会遇到意外错误。我确定这是我的错,但在这一点上,我真的不想弄清楚。
嘿,我并不是要贬低任何人在这里的工作,但自从 4.0 发布以来,我一直在努力使用 HttpComponents,但它对我不起作用。
【问题讨论】:
-
虽然不是完美无缺,但您是否考虑过标准的 URLConnection/HTTPUrlConnection ?
-
必须调用 InputStream#close() 来释放分配的资源是非常复杂的,不是吗?
-
自 4.0 以来,API 随每个点发布而改变的次数比我更换内衣的次数还要多
-
@RTF 我不认识你,所以我不知道 API 是否变化很快,或者我是否应该避免闻到你家的味道:D
-
@Joffrey A 列的一点点,B 列的一点点
标签: java http jetty httpclient