Android 中的废物 HttpURLConnection - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiangyuecn
V2EX    Android

Android 中的废物 HttpURLConnection

  •  
  •   xiangyuecn 2019-05-27 21:36:06 +08:00 12281 次点击
    这是一个创建于 2327 天前的主题,其中的信息可能已经有所发展或是发生改变。

    姐妹篇 : /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


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

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

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

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

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

    但这锅是 Android 还是 java 的,我不知道,目测 Android 的锅可能性比较大。
    xiangyuecn
        3
    xiangyuecn  
    OP
       2019-05-27 22:48:58 +08:00
    @nicevar 被你一眼看穿了,打错了一个字
    300
        4
    300  
       2019-05-27 22:53:38 +08:00
    我记得当时怎么都接收不了响应,调了半天。最后才知道错误的时候是从 getErrorStream 拿。。。。
    dobelee
        5
    dobelee  
       2019-05-27 22:54:24 +08:00 via Android
    这不是 java 的 http 库吗?跟 Android 有毛关系...
    这也不是什么底层缺陷。
    luckylo
        6
    luckylo  
       2019-05-27 22:55:28 +08:00 via Android
    你已经发现了问题,只不过解决问题的方式不对。当然,大部分都是 Google 程序员,相信 Google 这个问题,会有人提到注释
    luckylo
        7
    luckylo  
       2019-05-27 22:57:01 +08:00 via Android
    @winterbells 我前天看了 spring RestTemplate 的部分源代码,才知道 jdk8 开始,delete 请求要特殊处理下
    luckylo
        8
    luckylo  
       2019-05-27 23:02:31 +08:00 via Android
    @luckylo 错了,是 jdk 8 以前。
    xiangyuecn
        9
    xiangyuecn  
    OP
       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 里面有这个问题)。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5626 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:32 PVG 14:32 LAX 23:32 JFK 02:32
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86