2011-10-06 106 views
3

我试图用我的Android应用程序登录到https网站。如果登录成功,网站返回302响应代码,如果登录失败,网站返回200。我研究了如何使用AndroidHttpClient并查看示例,但我一直无法看到我的代码和他们的代码之间有任何区别。无论我发送给网站的用户名和密码如何,我都会得到200的回复代码 - 即使组合是正确的。自从网站使用安全的http以来,我必须做些特别的事情吗?这是我的代码。我非常感谢任何帮助。AndroidHttpClient期望响应代码302但接收200

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

响应代码200是磨片你的HTTP连接成功,它不会检查您登录与否。所以如果你的连接成功,它将只返回200 .. –

+0

这个特定的网站是否可以重定向到一个登录页面,而不是返回302? (相关:http://stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call) –

+0

@Lalit Poptani你知道它为什么给我一个回应代码302当我使用javax.net.ssl.HttpsURLConnection?另外,当我得到200响应时,我很确定我没有得到一个cookie来登录我。这就像它只是忽略登录请求,只是拉起登录页面。 – Cole119

回答

0

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

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

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

编辑:在进一步检查,它看起来像KVP正在传递到HttpPostHttpGet正在使用的要求,所以用户名/密码也不会被完全传递给服务器。

得太多有时确实的东西导致人们在正确的方向,虽然

+0

我以为我使用POST? – Cole119

+0

不是一个机器人或java开发人员,但我是:'httpGet = new HttpGet(url);'和'httpResponse = httpClient.execute(httpGet,httpContext);'(而不是在请求中使用你的'post'变量。 ) –

+0

哦,你是对的!哈哈,我在网上看了很多例子,我必须混合不同的部分,并使用get而不是post。非常感谢! – Cole119