我只是想知道你是否有任何使用java默认HttpURLConnection类的问题。某种让你切换到apache commons的bug。
或者只是类暴露的(丑陋的)接口证明第三方http lib的诞生是正确的吗?
披露:我听到一些反对java.net的论点有一些严重的问题,但我发现很难相信作为java核心发行版的一部分的类在多次发布后仍然存在问题JDK
答案 0 :(得分:4)
将我带到Apache HttpClient的东西是,
您现在应该使用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客户端:
HttpURLConnection
和Apache 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 已弃用方法和类的情况。有一个明确的模式,即使有历史例外。