不知道是不是有人碰到过,用 HttpURLConnection 类提交 GET 请求,获取不到响应状态码
URL url = new URL(URL_ADDR);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setConnectTimeout(5000);
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 头,换成其他地址也是一样的结果
1
cnnblike 2015-09-25 08:27:25 +08:00
我个人的建议说了你肯定要打我……我的建议是:用 HttpClient 。比 HttpURLConnection 不知道好用到哪里去了。
以及,任何出现问题的情况,先用 WireShark 抓包,接着读源码,逐行 debug 。 |
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 |
3
ljbha007 2015-09-25 08:52:13 +08:00
@cnnblike 另外 Square 家的 okhttp 也很不错 http://square.github.io/okhttp/
|
4
holmesabc 2015-09-25 09:40:06 +08:00
HttpURLConnection 用起来是很烦碎的。
由于 6.0 开始把 httpclient 费了, 最好就是直接转 okhttp |
5
KoleHank 2015-09-25 10:23:01 +08:00
URL_ADDR 是自己的站点还是国外的?我曾经因为墙的问题,用 HttpURLConnection 访问国外的一个 api 死活就是得不到正确的结果的情况。
弄一点测试代码到国外的 vps 上面测试了一下,结果就能正常访问了。 |
6
cnnblike 2015-09-25 14:55:35 +08:00
@ljbha007 性能问题感觉没什么大不了的吧,除非你每秒几百个链接,不然哪来的性能问题……速度慢和更慢之间的差距用户根本不大可能体会出来。不过 httpclient 确实有点笨重了,我去看看 okhttp 哈~
顺便好奇怪,你我都没互相 Block ,我怎么就没收到你的 @ 呢?奇怪了 |
7
aa45942 OP |
8
ljbha007 2015-09-25 15:57:05 +08:00
|
9
Droog 2015-09-25 19:58:01 +08:00 via iPhone
@ljbha007 httpclient 被干掉是什么意思? 6.0 以后即使在 apache 上下载的也用不了?
|
11
jeremaihloo 2015-09-25 21:11:02 +08:00 via Android
不都在用 okhttp 了吗,其他两个不推荐用了吧
|
12
aa45942 OP @jeremaihloo 这不是项目上的代码,只是我单纯拿来玩的,所以用哪个都无所谓,但出现了这个现象,然后想知道问题出在哪
|
14
snnn 2015-09-30 13:15:08 +08:00
@jeremaihloo okhttp 不支持 ntlm 。而我需要用 ntlm 。唉……
|