NoB*_*ugs 6 java redirect android urlconnection http-status-code-301
使用URLConnection时,301重定向不起作用,甚至不Location使用getHeaderFields()显示标题.它是一个空白列表,除了较新的Android(我测试4.1并且它工作).它看起来像这样的东西已经被报道在默认浏览器在这里为好,但在我的测试中它的Android浏览器的工作.在旧的Android中是否有针对此错误的解决方法?
我试过了:
URLConnection conn = u.openConnection();
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
(conn).setInstanceFollowRedirects(true);
Run Code Online (Sandbox Code Playgroud)
但它仍然会返回一个空列表,除了较新的Android.
更新:这可能是一个相关的问题,有时似乎URLConnection甚至没有在某些情况下发送请求.(我在带有模拟器的电脑上查看了Wireshark).有办法解决这个错误吗?
更新:我尝试测试3xx重定向,重定向工作正常,但普通链接不适用于Ian的Cookie管理器.确保在openConnection之后直接调用setCookies时,它可以很好地工作:
URL u = new URL(_url);
...
int tries = 4;
int code = 301;
URLConnection conn = null;
while (tries > 0 && code/100 == 3) {
conn = null;
conn = u.openConnection();
_CM.setCookies(conn);
((HttpURLConnection)conn).setInstanceFollowRedirects(false);//Required
code =((HttpURLConnection)conn).getResponseCode();
if (code/100 == 3) {
String loc = conn.getHeaderField("Location");
u = new URL(loc);
}
}
//conn.addRequestProperty("Accept-Encoding", "gzip");
conn.connect();
_CM.storeCookies(conn);
Run Code Online (Sandbox Code Playgroud)
真正奇怪的是,对于较新的Android(4.1模拟器),FollowRedirect行(注释为"必需")不是必需的.在较旧的Android(2.2)上,它会Connection Reset by Peer出错.这可能是我的重定向实验代码在2.2而不是4.1上失败的原因.功能上有什么不同的原因?根据这里的评论,重定向https显然具有不同的行为,具体取决于JVM版本,可能是Android的URLConnection/HTTPUrlConnection在不同的版本中也发生了变化吗?
不确定 URLConnection,但我知道 HttpClient 尊重重定向,我们一直使用它回到 Android 2.1
http://developer.android.com/reference/org/apache/http/client/HttpClient.html
(基于apache commons HttpClient)