使用HTTPClient还是HttpUrlConnection?

9
我们正在JRE 1.4上实现REST客户端。
似乎有两种很好的选项可用于客户端REST框架:HttpClientHttpUrlConnection
是否有使用HttpClient而不是JRE的HttpUrlConnection的原因?

那个比较实际上是在看创新的HTTPClient,据我所知它与Apache的HttpClient无关。 - objects
感谢对象..已删除链接。 - Marcus Leon
7个回答

4

我给你一个具体的理由,支持使用Apache的HTTPClient而不是JDK实现:JDK的HttpUrlConnection不支持超时,而Apache的HTTPClient可以。

应用程序在调用其他系统(数据库、远程服务、自己的服务器后端等)时,应始终具有设置超时的能力。

* 这在Java 1.5中得到了修复;Java 1.5及更高版本支持HttpUrlConnection中的超时。


8
不正确!这个问题在Java 1.5中得到了修复。 - Jim Ferrans
我改正了。很好知道(它是在URLConnection类中)。 - SteveD
好的观点。我们现在使用的是1.4版本,所以这个看起来非常相关。 - Marcus Leon

4
我建议使用Jakarta Commons HTTP Client而不是java.net.HttpUrlConnection,因为它更加成熟,并且具有更丰富的功能集。例如,您可以要求它设置多线程连接池(请参见MultiThreadedHttpConnectionManager),并且它完全支持所有HTTP方法(GET、PUT、POST、DELETE、OPTIONS、TRACE)。

2
Restlet框架还具有可在服务器端和客户端上运行的API。我们支持可插拔的客户端连接器,利用HttpURLConnection或Apache HTTP Client或我们自己的内部HTTP客户端。
我们的ClientResource类提供了一个更高级别的HTTP客户端API,具有自动重定向、对象和表示之间的透明转换、内容协商等功能。
祝好,
Jerome Louvel
Restlet ~ 创始人和首席开发人员 ~ http://www.restlet.org
Noelios Technologies ~ 共同创始人 ~ http://www.noelios.com

我们现在使用的是1.4版本 - Restlet能在1.4上运行吗? - Marcus Leon
@Marcus:是的,它确实可以。我现在正在使用Java 1.6中的Restlet客户端,感觉非常好。我们已经将其配置在Apache HTTP Client之上,这比java.net.HttpUrlConnection要好得多。 - Jim Ferrans

1

...httpclient不支持代理的kerberos/ntlm身份验证等... Java的httpurlconnection可以直接进行身份验证...


1
在我的经验中,HttpClient 比使用 HttpUrlConnection 稍微更容易和直观一些,但我认为这是一个非常主观的决定,因人而异。

1
我会选择JRE版本,这样我就少了一个需要传输的依赖项。

1
这个比较看起来有点过时了。 - jitter
2
我们中的一些人没有使用最新版本的任何东西的奢侈 :-( - Michael Rutherfurd

0

HttpUrlConnection 很容易处理。REST 实现也相当简单。

尽管如此,您必须考虑整个实现环境,并检查哪种方法对您更有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接