Android 中的废物 HttpURLConnection

2019-05-27 21:36:06 +08:00
 xiangyuecn

姐妹篇 : /t/487915 : C#中的废物 WebRequest

没想到 Android 中想发一个超级简单 http 请求也这么废:

http 可以自动 30x 跳转到 http

https 可以自动 30x 跳转到 https

http 不可以自动 30x 跳转到 https 反之亦然

没有一个省心的。害得我试了半天 setInstanceFollowRedirects、setFollowRedirects,看样子要全部干掉,自己实现 30x 跳转逻辑。

搜到几篇针对这个问题的解释文章:jianshu /p/bb9ad9b8720f、blog? /alexmofer/article/details/52790486


如果要支持跳转,这不应该是核心的功能吗????

如果是不支持还没话可说,但这玩意尽特么挖坑😒😒😒

😒😒😒

😒😒😒

9020 次点击
所在节点    Android
9 条回复
nicevar
2019-05-27 22:28:20 +08:00
一个简单的 http 跳转至于么,喷之前先把文档看了,然后写代码调试一下,免得自己是废物还不知道
另外告诉你 HttpURLConnection 与 Android 没啥关系,它是 java 库里面的
xiangyuecn
2019-05-27 22:48:07 +08:00
@nicevar 被你一样看穿了😁 刚特意翻译了一下 HttpURLConnection 这个类的注释,里面确实写了 `http 不会跳转到 https 反之亦然`。不是不看文档,只是出现这种问题的时候往往难以找到能快速解决问题的位置。

针对这样的低级、另类的缺陷,喷一喷也无妨。妄想想通过寥寥数笔的注释把底层的无能转嫁给上层的开发者,这是难以理解的。

在没有因为这个问题而产生问题的时候,估计很少有开发者在用到 HttpURLConnection 时候会关注到这个问题。

但这锅是 Android 还是 java 的,我不知道,目测 Android 的锅可能性比较大。
xiangyuecn
2019-05-27 22:48:58 +08:00
@nicevar 被你一眼看穿了,打错了一个字
winterbells
2019-05-27 22:53:38 +08:00
我记得当时怎么都接收不了响应,调了半天。最后才知道错误的时候是从 getErrorStream 拿。。。。
dobelee
2019-05-27 22:54:24 +08:00
这不是 java 的 http 库吗?跟 Android 有毛关系...
这也不是什么底层缺陷。
luckylo
2019-05-27 22:55:28 +08:00
你已经发现了问题,只不过解决问题的方式不对。当然,大部分都是 Google 程序员,相信 Google 这个问题,会有人提到注释
luckylo
2019-05-27 22:57:01 +08:00
@winterbells 我前天看了 spring RestTemplate 的部分源代码,才知道 jdk8 开始,delete 请求要特殊处理下
luckylo
2019-05-27 23:02:31 +08:00
@luckylo 错了,是 jdk 8 以前。
xiangyuecn
2019-05-27 23:02:50 +08:00
@dobelee #5 看起来像 java 的库,但我看 https://www.jianshu.com/p/bb9ad9b8720f 里面的解释,发帖子的时候就把锅甩给了 Android,抄录一段:

““““
然后 google 了一下,从回答中探索答案,发现 HttpURLConnection 从 Android 5.0 后其 http 和 https 是使用 okHttp 实现的,引用作者的回答:

......

根据上边英文,我们知道 Android 重新导出了新的 jar,jar 中将 com.squareup 这两级目录改成 com.android。所以我们直接找 com.squareup.okhttp.HttpsHandler,在源码中果真找到了改 java 文件:
”””

可以发现他记录的 HttpURLConnection 底层实现会根据 Android 版本不同而不同,因此 Android 的锅可能性比较大。

============

另外“底层”算是一个相对概念吧,我们上面在写业务代码,用到了 Android 里面的东西,那么那些东西应该就算底层了吧,我是这样理解的。

============

这是一个缺陷(至少我现在用到的语言中,只发现 Android 里面有这个问题)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/568166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX