因此,我得出的结论是,Apache 4是我遇到过的最繁重的HttpComponents之一。看似简单的事情却需要数百行代码(我仍然不确定资源是否得到了正确的清理)。
另外,它还想让我做这样的事情:
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,我们并不关心简洁这件事,但这有点太多了。更不用说jars高达700KB了。
无论如何,说得够多了,我想看看人们对其他HTTP客户端库有什么体验?
我知道的是:Jetty、hotpotato和AsyncHttpClient。
这是为了在服务器端使用,我最感兴趣的是多个并发gets和大文件传输的性能。
有什么建议吗?
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,但它对我来说并不起作用。
发布于 2012-03-30 13:12:02
回答我自己的问题,因为出于某种原因,这被复活了。
我最终围绕java.net.HttpURLConnection
编写了一些简单的包装器,似乎与我上次认真考虑它相比已经有很长的路要走了。
Apache HttpComponents很棒,但是对于简单的任务来说可能太过分了。此外,至少在我的场景中,HUC明显更快(主要是单线程,没有在重负载下进行任何测试)。
发布于 2011-03-24 17:11:18
HttpClient接口的复杂性仅仅反映了其问题域的复杂性。与流行的误解相反,HTTP是一个相当复杂的协议。作为一个低级传输库,HC4.0API主要针对性能和灵活性而不是简单性进行了优化。令人遗憾的是,你不能弄清楚,但就这样吧。欢迎您使用任何最适合您需要的库。我个人非常喜欢Jetty HttpClient。这是一个很好的替代方案,可能更适合你。
发布于 2014-04-12 16:08:04
jsoup
jsoup是一个用来解析超文本标记语言文件的库。它确实会进行HTTP调用来检索网页的源代码。
Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
https://stackoverflow.com/questions/5415111
复制相似问题