首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Apache HttpComponents的替代品?

Apache HttpComponents的替代品?
EN

Stack Overflow用户
提问于 2011-03-24 13:23:49
回答 7查看 26K关注 0票数 49

因此,我得出的结论是,Apache 4是我遇到过的最繁重的HttpComponents之一。看似简单的事情却需要数百行代码(我仍然不确定资源是否得到了正确的清理)。

另外,它还想让我做这样的事情:

代码语言:javascript
复制
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客户端库有什么体验?

我知道的是:JettyhotpotatoAsyncHttpClient

这是为了在服务器端使用,我最感兴趣的是多个并发gets和大文件传输的性能。

有什么建议吗?

PS我知道古老的HttpClient 3.1仍然存在,但我想使用一些受支持的东西。

更新

@oleg:这是文档所建议的:

代码语言:javascript
复制
    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,但它对我来说并不起作用。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-03-30 13:12:02

回答我自己的问题,因为出于某种原因,这被复活了。

我最终围绕java.net.HttpURLConnection编写了一些简单的包装器,似乎与我上次认真考虑它相比已经有很长的路要走了。

Apache HttpComponents很棒,但是对于简单的任务来说可能太过分了。此外,至少在我的场景中,HUC明显更快(主要是单线程,没有在重负载下进行任何测试)。

票数 6
EN

Stack Overflow用户

发布于 2011-03-24 17:11:18

HttpClient接口的复杂性仅仅反映了其问题域的复杂性。与流行的误解相反,HTTP是一个相当复杂的协议。作为一个低级传输库,HC4.0API主要针对性能和灵活性而不是简单性进行了优化。令人遗憾的是,你不能弄清楚,但就这样吧。欢迎您使用任何最适合您需要的库。我个人非常喜欢Jetty HttpClient。这是一个很好的替代方案,可能更适合你。

票数 21
EN

Stack Overflow用户

发布于 2014-04-12 16:08:04

jsoup

jsoup是一个用来解析超文本标记语言文件的库。它确实会进行HTTP调用来检索网页的源代码。

代码语言:javascript
复制
Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5415111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档