httpURLConnection 与 apache commons http
-
27-09-2019 - |
题
我只是想知道你们中的任何人在使用 java 默认 HttpURLConnection 类时是否遇到任何问题。某种错误让你切换到 apache commons。
或者只是类公开的(丑陋的)接口证明了第 3 方 http lib 的诞生?
披露:我听到了一些反对 java.net 有一些严重问题的论点,但我发现很难相信作为 java 核心发行版一部分的类在 JDK 的多个版本之后仍然存在问题
解决方案
促使我使用 Apache HttpClient 的因素是:
- Buggy 保持活动支持。
- Cookie 处理。
您现在应该使用 HttpClient 4(Apache HTTP 组件)。
编辑:第一个问题已经在这里讨论过几次了。看,
HttpURLConnection.getResponseCode() 在第二次调用时返回 -1
尽管这个问题在 Android 上似乎更严重,但我们在 J2SE 上看到了确切的问题。
其他提示
在 Android SDK中说 <强>体型HttpURLConnection类新的代码强>
Android包括两个HTTP客户端:
HttpURLConnection
和Apache 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的案例 有 已弃用的方法和类。尽管历史上有例外,但还是有一个清晰的模式。