gpt4 book ai didi

java - 301/302 重定向在 Android 中不起作用(不同版本的工作方式不同)

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:50 24 4
gpt4 key购买 nike

使用 URLConnection 时,301 重定向不起作用,甚至不显示 Location header ,使用 getHeaderFields()。这是一个空白列表,除了较新的 Android(我测试了 4.1 并且它有效)。看起来这已经在默认浏览器中报告了 here同样,尽管在我的测试中它可以在 Android 浏览器中运行。旧版 Android 中的此错误是否有一些解决方法?

我试过:

URLConnection conn = u.openConnection();
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
(conn).setInstanceFollowRedirects(true);

但它仍然返回一个空列表,除了较新的 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);

真正奇怪的是,对于较新的 Android(4.1 模拟器),FollowRedirect 行(注释为“Required”)不是必需的。在较旧的 Android (2.2) 上,它会给出 Connection Reset by Peer 错误。这可能是我的重定向实验代码在 2.2 而不是 4.1 上失败的原因。功能差异的任何原因?根据comments here , 重定向 https 显然根据 JVM 版本有不同的行为,会不会是 Android 的 URLConnection/HTTPUrlConnection 在不同版本中也发生了变化?

最佳答案

不确定 URLConnection,但我知道 HttpClient 支持重定向,我们一直使用它回到 Android 2.1

http://developer.android.com/reference/org/apache/http/client/HttpClient.html

(基于apache commons HttpClient)

关于java - 301/302 重定向在 Android 中不起作用(不同版本的工作方式不同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12870385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com