我正在尝试使用我的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());
}
答案 0 :(得分:0)
您应该使用POST而不是GET,因为GET会自动处理重定向,但是:
如果收到302状态代码以响应GET或HEAD以外的请求,则除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变请求的条件。发出的。
参考:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
编辑:进一步检查时,看起来KVP被传递到HttpPost
但HttpGet
被用于请求,因此用户名/密码不会传递给服务器。
有时候过度思考会导致一个人走向正确的方向