使用HTTPClient或HttpUrlConnection?

我们正在JRE 1.4上实现REST客户端。

似乎客户端REST框架的两个好选择是HttpClient和HttpUrlConnection 。

是否有理由在JRE的HttpUrlConnection上使用HttpClient?

我会推荐Jakarta Commons HTTP Client over java.net.HttpUrlConnection,因为它更成熟并且具有更丰富的function集 。 例如,您可以要求它设置multithreading连接池(请参阅MultiThreadedHttpConnectionManager ),它完全支持所有HTTP方法(GET,PUT,POST,DELETE,OPTIONS,TRACE)。

我将给出一个有利于Apache的HTTPClient而不是JDK实现的具体理由:JDK的HttpUrlConnection不支持超时*,Apache的HTTPClient支持超时*。

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

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

Restlet Framework还有一个API,可以在服务器端和客户端工作。 我们支持可插拔客户端连接器,利用HttpURLConnection或Apache HTTP Client或我们自己的内部HTTP客户端。

我们的ClientResource类提供更高级别的HTTP客户端API,具有自动重定向,对象和表示之间的透明转换,内容协商等function。

最好的祝福,

杰罗姆·洛维尔

Restlet~创始人兼首席开发人员~ http://www.restlet.org

Noelios Technologies~联合创始人〜http://www.noelios.com

根据我的经验,HttpClient比使用HttpUrlConnection更容易,更直观,但我认为这是一个非常主观的决定和YMMV。

我会选择JRE版本,这样我就可以减少一个依赖性。

… httpclient不支持代理等的kerberos / ntlm身份validation… java的httpurlconnection将进行开箱即用的身份validation…

HttpUrlConnection易于处理。 REST实现非常简单。

虽然您必须考虑有关此实现的整个环境,并检查哪些更适合您。