gpt4 book ai didi

android - android 2.3.x 和 4.0.3 中的 HttpURLConnection 差异

转载 作者:搜寻专家 更新时间:2023-11-01 09:06:16 25 4
gpt4 key购买 nike

这是对我正在尝试做的事情的描述:我想通过 HttpURLConnection 向网站发送登录表单。因此,首先我向登录页面发送 GET 请求,以检查它是否存在以及我是否尚未登录。在我关闭连接和输入流后,我正在制作要发送的参数。然后我发出 POST 请求以实际登录。

代码:

url = new URL("http://www.example.com/login/");
con = (HttpURLConnection) url.openConnection();
in = con.getInputStream();
if(con.getResponseCode()==HttpURLConnection.HTTP_OK){
loginData = getResponseData(in); // InputStream to String
in.close();
if(isBlank(loginData)){
return StatusCode.CONNECTION_FAILED; // no login page
}
if (Login.getLoginStatus(loginData)) {
return StatusCode.NO_ERROR; // already logged in
}
}
con.disconnect();

String params = "password="+URLEncoder.encode(login.second,"UTF-8")+
"&username="+URLEncoder.encode(login.first,"UTF-8");

url = new URL("http://www.example.com/login/login.php");
con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setFixedLengthStreamingMode(params.getBytes().length);
out = con.getOutputStream();
out.write(params.getBytes());
out.close();
in = con.getInputStream(); \\ THIS IS WHERE IT GETS STUCK
if(con.getResponseCode()==HttpURLConnection.HTTP_OK){
loginData = getResponseData(in);
in.close();
if(isBlank(loginData)){
return StatusCode.CONNECTION_FAILED; // no login page
}
if (Login.getLoginStatus(loginData)) {
return StatusCode.NO_ERROR; // logged in
}
if (loginData.contains("Invalid username and//or password.")) {
return StatusCode.WRONG_LOGIN_DATA; // wrong login
}
}
con.disconnect();

在 2.3.x 版本中,它返回响应代码:302,InputStream 中没有数据(con.getInputStream() 非常快),我可以在 eclipse Debug模式下看到所有 header .

在版本 4.0.3 中,它返回响应代码:200,InputStream 中的所有数据(con.getInputStream() 卡住了大约 2 分钟),在 Debug模式下我可以阅读以下内容:

con.ResponseCode = -1
con.ResponseMessage = null
con.redirectionCount = 1

您知道为什么会有这些差异吗?我如何才能让它在 2.3.x 及更高版本的每个版本中正常工作?

最佳答案

在 4.0.3 中,系统会自动为您处理重定向(这就是您甚至看不到 302 响应代码的原因)。

有一个getInstanceFollowRedirects HttpURLConnection 类上的方法(或 getFollowRedirects 静态方法),您可以使用它来查看是否自动遵循重定向。使用相应的 setter 对应项(setInstanceFollowRedirects 或静态 setFollowRedirects),您可以更改此行为。

关于android - android 2.3.x 和 4.0.3 中的 HttpURLConnection 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11690176/

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