httpURLConnection与apache commons http的区别

6

我想知道你们是否在使用Java默认的HttpURLConnection类时遇到了任何问题。是否出现了某种bug,使你们转向使用Apache Commons?

还是说这个类暴露出来的(丑陋的)接口,正是第三方http库产生的原因?

声明:我听说过一些反对java.net的论点,但我很难相信一个作为Java核心分发的类,在几个JDK版本之后仍然存在问题。

3个回答

4

什么是有漏洞的keep-alive?你能再具体一些吗?谢谢答复! - Pablo Fernandez
让我看看是否理解正确。问题是,如果您没有读取整个流,则以下连接将从第一个连接获取垃圾(未读数据)?这是因为URL连接之间存在一些流共享吗?谢谢 ZZ。 - Pablo Fernandez
这与保持连接有什么关系? - Pablo Fernandez
如果您使用keep-alive,所有这些事情都会导致下一个连接失败。 - ZZ Coder
好的,你不太健谈是吧? :) 不管怎样,感谢你的回答,肯定是被接受的!+1 - Pablo Fernandez

4

Android SDK表示首选HttpURLConnection处理新代码

Android包含两个HTTP客户端:HttpURLConnectionApache HTTP Client。两者都支持HTTPS、流式上传和下载、可配置超时、IPv6和连接池。在Android 2.2(Froyo)及之前版本中,Apache HTTP client的错误较少。对于Android 2.3(Gingerbread)及更高版本,HttpURLConnection是最佳选择。其简单的API和小巧的体积使其非常适合Android。透明的压缩和响应缓存减少了网络使用,提高了速度并节省了电池寿命。请查看Android Developers Blog了解这两个HTTP客户端之间的比较。


2
这是一个很好的答案,但我想知道它是否只适用于Android。他们没有使用其他人使用的相同(Oracle)JVM,对吧? - dhalsim2

0
“......但我很难相信一个Java核心分发的类在几个JDK版本后仍然存在问题。”
“为了保护Sun,他们被夹在了两个难以抉择的选择中:”
- “如果他们解决这些问题,无疑会破坏成千上万依赖于当前API及其不理想行为的遗留应用程序。如果这样做,他们的付费客户群体将面临巨大的反弹,而更多企业将被迫使用古老的JDK版本。” - “如果他们不解决问题,那么他们将会受到纯粹主义者无休止的指责,认为每个问题都应该得到解决,兼容性算什么?”
“至少需要HTTP客户端API的人有更好的选择……如果他们想使用它。”
这就是为什么 @deprecated 被发明出来的原因。
理论上是,但在实践中,Oracle 使用过时作为一种强烈的信号向程序员(更重要的是,管理人员)表明他们需要更改代码。
这里并不合适。 让我们看看具体问题:
- “HttpURLConnection 无法处理 cookie” 不是将其弃用的理由。 已经使用 HttpURLConnection 构建应用程序的人将已经解决了此问题。 对于他们来说,更改为其他 HTTP 客户端类是不必要的工作。 - “HttpURLConnection 不支持保持活动状态” 也不是弃用的理由。 大多数应用程序不需要保持活动状态。
等等。
弃用是一种粗暴的工具,Sun/Oracle 的理念是只有在 API 难以安全使用时才会使用它;即当开发人员花费时间重新编写代码等方面有强烈的商业案例时。

但是不要只听我的话。看看Sun/Oracle已经弃用的方法和类的案例。即使存在历史上的例外情况,也有明显的模式。


1
这就是为什么 @deprecated 被发明出来的原因。 - Pablo Fernandez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接