httpURLConnection vs apache commons http

时间:2010-05-17 19:05:20

标签: java http httpurlconnection

我只是想知道你是否有任何使用java默认HttpURLConnection类的问题。某种让你切换到apache commons的bug。

或者只是类暴露的(丑陋的)接口证明第三方http lib的诞生是正确的吗?

披露:我听到一些反对java.net的论点有一些严重的问题,但我发现很难相信作为java核心发行版的一部分的类在多次发布后仍然存在问题JDK

3 个答案:

答案 0 :(得分:4)

将我带到Apache HttpClient的东西是,

  1. Buggy keep-alive support。
  2. Cookie处理。
  3. 您现在应该使用HttpClient 4(Apache HTTP Components)。

    编辑:这里已经多次讨论过第一个问题。参见

    HttpURLConnection.getResponseCode() returns -1 on second invocation

    HttpURLConnection: What's the deal with having to read the whole response?

    即使Android上的问题似乎更糟,我们也看到了J2SE上的确切问题。

答案 1 :(得分:4)

Android SDK says 首选HttpURLConnection以获取新代码

  

Android包含两个HTTP客户端:HttpURLConnectionApache HTTP Client。两者都支持HTTPS,流媒体上传和下载,   可配置的超时,IPv6和连接池。 Apache HTTP客户端   Android 2.2(Froyo)和早期版本中的错误较少。对于   Android 2.3(Gingerbread)及更高版本,HttpURLConnection是最好的   选择。其简单的API和小巧的尺寸使其非常适合Android。   透明压缩和响应缓存减少了网络使用,   提高速度,节省电池。有关,请参阅Android Developers Blog   比较两个HTTP客户端。

答案 2 :(得分:0)

  

...但是我很难相信,在JDK的几个版本发布之后,属于java核心发行版的一个类仍然存在问题。

为了防御太阳,他们陷入了困境之中:

  • 如果他们解决了这些问题,他们无疑会打破成千上万依赖于当前API及其不太理想的行为的遗留应用程序。如果他们这样做,他们的支付客户群的影响将是巨大的。使用古老的JDK版本会阻碍更多企业。

  • 如果他们不解决这个问题,那么他们会从纯粹主义者那里得到无穷无尽的抨击,他们认为每个问题都应该得到解决,而且兼容性很差。

至少需要HTTP客户端API的人有更好的选择......他们是否应该使用它。


  

这就是@deprecated被发明的原因。

理论上,是的......

然而,在实践中,Oracle使用弃用作为程序员(更重要的是管理人员)的强烈信号,他们需要更改其代码。

这里没有必要。让我们看看具体问题:

  • HttpURLConnection无法处理Cookie”不是弃用它的理由。已经针对HttpURLConnection构建应用程序的人员已经处理过此问题。对于他们来说,更改为不同的HTTP客户端类不必要的工作。

  • HttpURLConnection不支持keep-alives”也不是弃用的理由。大多数应用程序不需要保持活动。

等等。

弃用是一种钝器,Sun / Oracle的理念是它只应用于难以使用的安全的;即当有一个强大的商业案例供开发人员花时间重新编写代码时,等等。

但是,不要只听我的话。查看Sun / Oracle 已弃用方法和类的情况。有一个明确的模式,即使有历史例外。