【问题标题】:HttpResponse differs in Android and JavaHttpResponse 在 Android 和 Java 中有所不同
【发布时间】:2012-07-03 09:12:35
【问题描述】:

我正在寻求帮助! 我有一些代码执行服务器身份验证并从服务器检索响应。当我在我的java项目中的eclipse中执行它时,我得到了reddirrect响应:

<html><head><meta http-equiv="refresh" content="0;url=SiteIamLoggingPageURL/"/></head></html>

但是当我在我的 android 应用程序中执行相同的代码时,我得到的响应等于登录失败的情况。

HttpPost post = new HttpPost(loginPageAdress);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
//nameValuePairs.add(new BasicNameValuePair("remember", "1"));
nameValuePairs
        .add(new BasicNameValuePair("email", "email"));
nameValuePairs.add(new BasicNameValuePair("password", "password"));

post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
StringBuilder stringBuilder = new StringBuilder();

HttpResponse response = client.execute(post, httpContext);
BufferedReader rd = new BufferedReader(new InputStreamReader(response
        .getEntity().getContent(), "UTF-8"));
String line = "";
while ((line = rd.readLine()) != null) {
    stringBuilder.append(line).append("\n");
}
System.out.println(stringBuilder.toString());

有什么问题? o.o 感谢您的宝贵时间!

【问题讨论】:

  • logcat 说什么?也许你忘了把 INTERNET 权限放到 AndroidManifest.xml 中
  • 没有logCat错误左右,我还没有忘记INTERNET权限:
  • response.getStatusLine().getStatusCode(); 的值是多少 你的验证码对我来说看起来不太正确。响应状态码会告诉一些用于登录的认证类型服务器的基本信息。

标签: java android httpurlconnection apache-httpclient-4.x


【解决方案1】:

听起来你忘了添加

 <uses-permission android:name="android.permission.INTERNET" />

在 AndroidManifest.xml 中。 看看this tutorial

【讨论】:

  • 我真的没有忘记这一点 :) 我收到了响应 HTML 页面,所以我的连接正常。肯定还有别的事~_~
【解决方案2】:
  1. 如果这是您的身份验证代码,您必须使用通过标头重定向而不是通过 HTML 刷新元标记。服务器应该发出位置:http://authenticated.jsp f.e.
  2. 要检查实际情况,请使用 Wireshark。那你就不再瞎了。这里 - 来自 Android 的请求,这里来自服务器的回答。这是一个非常有用的工具,花一些时间使用它。

【讨论】:

    【解决方案3】:

    这可能是因为您没有在单独的Thread 上执行 HTTP 请求。在此处阅读更多信息:

    Why Ice Cream Sandwich Crashes Your App

    【讨论】:

    • 事实上这是在另一个线程中运行的:S 已经伤透了我的大脑。也许我的 Java HttpClient 4.2 和一个 android 有一些差异......
    • 是的,Java HttpClient 不是线程安全的,IIRC ......还是我错了? AndroidHttpClient 是线程安全的,所以也许你应该尝试使用它(我相信是在 Froyo,Android 2.2 中引入的)。
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2023-03-29
    • 2017-09-27
    • 2015-05-24
    相关资源
    最近更新 更多