我只是想知道你们中的任何人在使用 java 默认 HttpURLConnection 类时是否遇到任何问题。某种错误让你切换到 apache commons。

或者只是类公开的(丑陋的)接口证明了第 3 方 http lib 的诞生?

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

有帮助吗?

解决方案

促使我使用 Apache HttpClient 的因素是:

  1. Buggy 保持活动支持。
  2. Cookie 处理。

您现在应该使用 HttpClient 4(Apache HTTP 组件)。

编辑:第一个问题已经在这里讨论过几次了。看,

HttpURLConnection.getResponseCode() 在第二次调用时返回 -1

HttpURL连接:必须阅读整个回复有什么关系?

尽管这个问题在 Android 上似乎更严重,但我们在 J2SE 上看到了确切的问题。

其他提示

Android SDK中说 <强>体型HttpURLConnection类新的代码

  

Android包括两个HTTP客户端:HttpURLConnectionApache HTTP Client。两者都支持HTTPS,流上传和下载,   配置超时,IPv6和连接池。 Apache的HTTP客户端   在Android 2.2的(升级Froyo)和更早的版本错误更少。对于   的Android 2.3(姜饼)和更高,HttpURLConnection是最好的   选择。其简单的API和小尺寸使得它非常适合于Android。   透明压缩和响应缓存减少网络中使用,   提高速度并节省电池。见一对 Android开发者博客   两个HTTP客户端的比较。

...但我发现很难相信作为 java 核心发行版一部分的类在 JDK 的多个版本之后仍然存在问题。

为了保护Sun,他们陷入了进退两难的境地:

  • 如果他们解决这些问题,无疑将破坏数以万计依赖当前 API 及其不太理想行为的遗留应用程序。如果他们这样做,他们的后果 支付 客户群将是巨大的。更多的企业将陷入使用古老的 JDK 版本的困境。

  • 如果他们不解决问题,他们就会受到纯粹主义者的无休止的批评,他们认为每个问题都应该得到解决,而且兼容性也该死。

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


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

理论上来说,是的...

然而,在实践中,Oracle 使用弃用作为向程序员(更重要的是,经理)发出的强烈信号: 需要 改变他们的代码。

这里不保证这一点。我们来看一下具体问题:

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

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

等等。

弃用是一种生硬的工具,Sun/Oracle 的理念是它只应在 API 难以使用的情况下使用 安全地;IE。当有一个强大的 商业案例 对于花时间重新编写代码等的开发人员。

但不要只相信我的话。看看Sun/Oracle的案例 已弃用的方法和类。尽管历史上有例外,但还是有一个清晰的模式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top