Dmi*_*tri 49 java http jetty httpclient
所以,我得出结论,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);
Run Code Online (Sandbox Code Playgroud)
哪个,只是......不.我知道它是Java,我们并不是整个简洁的事情,但这有点多了.更不用说罐子高达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();
}
Run Code Online (Sandbox Code Playgroud)
使用时消耗实体内容时仍会出现意外错误ThreadSafeClientConnManager.我确定这是我的错,但在这一点上我真的不想弄明白.
嘿,我并不是要贬低任何人在这里的工作,但是自从4.0问世以来我一直在努力使用HttpComponents并且它不适合我.
ok2*_*k2c 20
HttpClient API的复杂性简单地反映了其问题域的复杂性.与流行的误解相反,HTTP是一种相当复杂的协议.作为低级传输库,HC 4.0 API主要针对性能和灵活性而非简单性进行了优化.遗憾的是你无法弄清楚,但也是如此.欢迎您使用最适合您需求的图书馆.我个人非常喜欢Jetty HttpClient.这是一个很好的选择,可能会更好地为您服务.
Vah*_*yan 16
对于简单的用例,您可以使用 HttpClient Fluent API.查看教程.
该模块基于流畅的界面概念为HttpClient提供了易于使用的Facade API.Fluent facade API仅公开HttpClient的最基本功能,并且适用于不需要HttpClient完全灵活性的简单用例.例如,流畅的外观API使用户不必处理连接管理和资源释放
// Execute a GET with timeout settings and return response content as String.
Request.Get("http://somehost/")
.connectTimeout(1000)
.socketTimeout(1000)
.execute().returnContent().asString();
Run Code Online (Sandbox Code Playgroud)
Maven神器.
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>fluent-hc</artifactId>
<version>4.2.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
回答我自己的问题,因为它因某种原因而复活了.
我最后写了几个简单的包装器java.net.HttpURLConnection,似乎自上次我认真考虑它以来已经走了很长的路.
Apache HttpComponents很棒,但对于简单的任务来说可能有点过分.此外,至少在我的场景中,HUC明显更快(主要是单线程,在重负载下没有进行任何测试).
| 归档时间: |
|
| 查看次数: |
23623 次 |
| 最近记录: |