【问题标题】:httpURLConnection vs apache commons httphttpURLConnection vs apache commons http
【发布时间】:2011-02-20 13:42:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: java http httpurlconnection


    【解决方案1】:

    驱使我使用 Apache HttpClient 的原因是,

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

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

    编辑:第一个问题已在此处讨论过多次。看,

    HttpURLConnection.getResponseCode() returns -1 on second invocation

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

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

    【讨论】:

    • buggy keep-alive 是什么意思?你能更具体一点吗?感谢您的回答!
    • 让我看看我是否明白这一点。问题是,如果您不读取整个流,则以下连接会从第一个连接中获取垃圾(未读数据)?发生这种情况是因为 URL 连接之间的一些流共享?谢谢ZZ
    • 这和keep-alive有什么关系?
    • 如果你使用keep-alive,所有这些都会导致下一次连接失败。
    • ...好吧,你不是很健谈,不是吗? :) 无论如何,感谢您的回答,并且肯定是被接受的! +1
    【解决方案2】:

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

    为了保护太阳,他们被夹在了石头和坚硬的地方:

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

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

    至少需要 HTTP 客户端 API 的人有更好的选择……如果他们想使用它。


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

    理论上,是的……

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

    这里没有保证。让我们看看具体的问题:

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

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

    等等。

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

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

    【讨论】:

    • 这就是@deprecated 被发明的原因。
    【解决方案3】:

    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 客户端的比较。

    【讨论】:

    • 这是一个很好的答案,但我想知道它是否仅适用于 Android。他们使用的不是其他人使用的 (Oracle) JVM,对吧?
    猜你喜欢
    • 2010-11-29
    • 2015-09-12
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2015-01-04
    • 2012-03-01
    • 2011-01-21
    相关资源
    最近更新 更多