通过Android应用程序登录https网站

时间:2011-06-22 16:38:14

标签: android http authentication asp-classic http-post

首先,我很擅长这个。我是Android,asp,javascript,甚至是http的新手。

我正在尝试构建一个Android应用程序,允许我登录我学校的网站并从中取出数据,最终我希望做一些事情,比如将我的时间表数据插入到Android的日历条目中。但是我无法登录。

这是网站: https://sso.wis.ntu.edu.sg/webexe88/owa/sso_login2.asp

我目前正在做的是对上述URL进行http POST,我希望将其重定向到hhttps://wish.wis.ntu.edu.sg/pls/webexe/aus_stars_check.check_subject_web2这将显示我的时间表。

到目前为止,在查看网页的来源并在互联网上搜索相当多的代码后,我的代码如下:

private void start_login(String[] array) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Logging in...", Toast.LENGTH_LONG).show();

    WebView wv = new WebView(this);     
    this.setContentView(wv);

    try {

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
        nameValuePairs.add(new BasicNameValuePair("UserName", <my username here>));
        nameValuePairs.add(new BasicNameValuePair("PIN", <my password here>));
        nameValuePairs.add(new BasicNameValuePair("Domain", "STUDENT"));
        nameValuePairs.add(new BasicNameValuePair("p2", "https://wish.wis.ntu.edu.sg/pls/webexe/aus_stars_check.check_subject_web2"));

        wv.loadData(CustomHttpClient.executeHttpPost(URL, nameValuePairs), "text/html", "utf-8");

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}// end start_login

这是登录功能。

我正在使用的CustomHttpClient是感谢这个人:http://www.newtondev.com/2010/07/27/making-http-requests-using-google-android/

到目前为止,我没有得到任何结果。我究竟做错了什么?我在ArrayList中缺少值,还是我的URL错了?

1 个答案:

答案 0 :(得分:3)

以下代码处理https并为https url提供httpsclient ..您需要httpsclient向https网址发出请求。

以下代码可能对您有所帮助:

public DefaultHttpClient getClient() 
   {
        DefaultHttpClient ret = null;

        //sets up parameters
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, "utf-8");
        params.setBooleanParameter("http.protocol.expect-continue", false);

        //registers schemes for both http and https
        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        final SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory();
        sslSocketFactory.setHostnameVerifier(SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
        registry.register(new Scheme("https", sslSocketFactory, 443));

        ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
        ret = new DefaultHttpClient(manager, params);
        return ret;
    }