姐妹篇 : /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
如果要支持跳转,这不应该是核心的功能吗????
如果是不支持还没话可说,但这玩意尽特么挖坑😒😒😒
😒😒😒
😒😒😒
1
nicevar 2019-05-27 22:28:20 +08:00
一个简单的 http 跳转至于么,喷之前先把文档看了,然后写代码调试一下,免得自己是废物还不知道
另外告诉你 HttpURLConnection 与 Android 没啥关系,它是 java 库里面的 |
2
xiangyuecn OP @nicevar 被你一样看穿了😁 刚特意翻译了一下 HttpURLConnection 这个类的注释,里面确实写了 `http 不会跳转到 https 反之亦然`。不是不看文档,只是出现这种问题的时候往往难以找到能快速解决问题的位置。
针对这样的低级、另类的缺陷,喷一喷也无妨。妄想想通过寥寥数笔的注释把底层的无能转嫁给上层的开发者,这是难以理解的。 在没有因为这个问题而产生问题的时候,估计很少有开发者在用到 HttpURLConnection 时候会关注到这个问题。 但这锅是 Android 还是 java 的,我不知道,目测 Android 的锅可能性比较大。 |
3
xiangyuecn OP @nicevar 被你一眼看穿了,打错了一个字
|
4
winterbells 2019-05-27 22:53:38 +08:00
我记得当时怎么都接收不了响应,调了半天。最后才知道错误的时候是从 getErrorStream 拿。。。。
|
5
dobelee 2019-05-27 22:54:24 +08:00 via Android
这不是 java 的 http 库吗?跟 Android 有毛关系...
这也不是什么底层缺陷。 |
6
luckylo 2019-05-27 22:55:28 +08:00 via Android
你已经发现了问题,只不过解决问题的方式不对。当然,大部分都是 Google 程序员,相信 Google 这个问题,会有人提到注释
|
7
luckylo 2019-05-27 22:57:01 +08:00 via Android
@winterbells 我前天看了 spring RestTemplate 的部分源代码,才知道 jdk8 开始,delete 请求要特殊处理下
|
9
xiangyuecn OP @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 里面有这个问题)。 |