关于 HttpURLConnection 的一个奇怪问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aa45942
V2EX    Android

关于 HttpURLConnection 的一个奇怪问题

  •  1
     
  •   aa45942 2015-09-25 02:02:29 +08:00 14313 次点击
    这是一个创建于 3752 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道是不是有人碰到过,用 HttpURLConnection 类提交 GET 请求,获取不到响应状态码

    URL url = new URL(URL_ADDR); HttpURLConnection cOnn= (HttpURLConnection)url.openConnection(); conn.setConnectTimeout(500); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpURLConnection.HTTP_ACCEPTED) { ... } ... 

    debug 的时候发现其实已经收到回复,但不知为何 header 没有 HTTP/1.1 这行,第一行是 Date ,导致 conn.getResponseCode()一直返回-1
    不得已把

    if (conn.getResponseCode() == HttpURLConnection.HTTP_ACCEPTED) 

    改成

    if (conn.getResponseCode() == HttpURLConnection.HTTP_ACCEPTED) || conn.getHeaderField(0) != null) 

    发现运行结果是正确的(也就是说仅仅是没获取到正确的响应状态码)

    编译工具为 Android Studio 1.3.2 , API 22/23 , AVD 与真机调试均失败

    有谁知道是什么问题么

    PS : URL_ADDR 是地址,我用 curl 试过,能获取到正常的 http 头,换成其他地址也是一样的结果

    14 条回复    2015-09-30 13:15:08 +08:00
    cnnblike
        1
    cnnblike  
       2015-09-25 08:27:25 +08:00
    我个人的建议说了你肯定要打我……我的建议是:用 HttpClient 。比 HttpURLConnection 不知道好用到哪里去了。
    以及,任何出现问题的情况,先用 WireShark 抓包,接着读源码,逐行 debug 。
    ljbha007
        2
    ljbha007  
       2015-09-25 08:48:25 +08:00
    @cnnblike 谷歌之前也是鼓励使用 httpclient 但是 2.3 之后因为 api 变动和性能问题 不鼓励开发者使用 HttpClient 了 如果非要使用最好使用 AndroidHttpClient

    http://android-developers.blogspot.jp/2011/09/androids-http-clients.html
    ljbha007
        3
    ljbha007  
       2015-09-25 08:52:13 +08:00
    @cnnblike 另外 Square 家的 okhttp 也很不错 http://square.github.io/okhttp/
    holmesabc
        4
    holmesabc  
       2015-09-25 09:40:06 +08:00
    HttpURLConnection 用起来是很烦碎的。
    由于 6.0 开始把 httpclient 费了, 最好就是直接转 okhttp
    KoleHank
        5
    KoleHank  
       2015-09-25 10:23:01 +08:00
    URL_ADDR 是自己的站点还是国外的?我曾经因为墙的问题,用 HttpURLConnection 访问国外的一个 api 死活就是得不到正确的结果的情况。
    弄一点测试代码到国外的 vps 上面测试了一下,结果就能正常访问了。
    cnnblike
        6
    cnnblike  
       2015-09-25 14:55:35 +08:00
    @ljbha007 性能问题感觉没什么大不了的吧,除你每秒几百个链接,不然哪来的性能问题……速度慢和更慢之间的差距用户根本不大可能体会出来。不过 httpclient 确实有点笨重了,我去看看 okhttp 哈~
    顺便好奇怪,你我都没互相 Block ,我怎么就没收到你的 @ 呢?奇怪了
    aa45942
        7
    aa45942  
    OP
       2015-09-25 15:48:25 +08:00
    @cnnblike httpclient 已经被干掉。源码没问题,抓包没问题, debug 看就缺了响应状态码

    @KoleHank 那个地址国内国外都试过,百度网易也试过,就是得不到正确结果
    ljbha007
        8
    ljbha007  
       2015-09-25 15:57:05 +08:00
    @aa45942 @cnnblike

    原来已经被废了

    @不到应该是因为我被管理员拉黑了吧 我发帖都要给我强行+ 4 小时时间 这样永远上不了首页
    Droog
        9
    Droog  
       2015-09-25 19:58:01 +08:00 via iPhone
    @ljbha007 httpclient 被干掉是什么意思? 6.0 以后即使在 apache 上下载的也用不了?
    aa45942
        10
    aa45942  
    OP
       2015-09-25 20:26:24 +08:00
    @Droog 就是说这个东西已经没有了
    jeremaihloo
        11
    jeremaihloo  
       2015-09-25 21:11:02 +08:00 via Android
    不都在用 okhttp 了吗,其他两个不推荐用了吧
    aa45942
        12
    aa45942  
    OP
       2015-09-25 21:23:22 +08:00
    @jeremaihloo 这不是项目上的代码,只是我单纯拿来玩的,所以用哪个都无所谓,但出现了这个现象,然后想知道问题出在哪
    ljbha007
        13
    ljbha007  
       2015-09-25 22:00:57 +08:00
    @Droog 只能自己用 maven 依赖了 原生没有了
    snnn
        14
    snnn  
       2015-09-30 13:15:08 +08:00
    @jeremaihloo okhttp 不支持 ntlm 。而我需要用 ntlm 。唉……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     800 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 20:35 PVG 04:35 LAX 12:35 JFK 15:35
    Do have faith in what you're doing.
    ubao msn 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