AndroidHttpClient期待响应代码302但接收200

时间:2011-10-06 02:30:18

标签: android http

我正在尝试使用我的Android应用登录https网站。如果登录成功,网站将返回响应代码302,如果登录失败,则返回200。我已经研究了如何使用AndroidHttpClient并查看了示例,但我无法看到我的代码和他们的代码之间有任何区别。无论我发送到网站的用户名和密码是什么,我都会收到200回复​​的响应代码 - 即使组合是正确的。我必须做一些特别的事情,因为网站使用安全的http?这是我的代码。我真的很感激任何帮助。

public void login(String url, String username, String password){
  CookieStore cookieStore;
  HttpContext httpContext;
  HttpGet httpGet;
  HttpResponse httpResponse;
  HttpPost post;
  AndroidHttpClient httpClient;

  cookieStore = new BasicCookieStore();
  httpContext = new BasicHttpContext();
  httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
  httpClient = AndroidHttpClient.newInstance("Android");
  List<NameValuePair> params = new ArrayList<NameValuePair>();
  params.add(new BasicNameValuePair("name", username));
  params.add(new BasicNameValuePair("pass", password));
  params.add(new BasicNameValuePair("form_id", "user_login"));

  httpGet = new HttpGet(url); 
  post = new HttpPost(url);
  try {
    post.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8));
    httpResponse = httpClient.execute(httpGet, httpContext);
  } catch (ClientProtocolException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
   Log.i("My App", httpResponse.getStatusLine().getStatusCode());
}

1 个答案:

答案 0 :(得分:0)

您应该使用POST而不是GET,因为GET会自动处理重定向,但是:

  

如果收到302状态代码以响应GET或HEAD以外的请求,则除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变请求的条件。发出的。

参考:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

编辑:进一步检查时,看起来KVP被传递到HttpPostHttpGet被用于请求,因此用户名/密码不会传递给服务器。

有时候过度思考会导致一个人走向正确的方向