Android HTTPS登录

时间:2012-06-18 04:00:29

标签: java android https

我正在尝试编写一个Android应用,这样我就可以从包含我的工作名单的网站上阅读文字https://www.blahblahblahcompany.com/Rostering/exportRoster.aspx

这可能吗?我可以通过网站验证自己,然后下载源代码吗?

相关网站还可以将名单导出为.xls文件

相关网页的屏幕截图 http://img528.imageshack.us/img528/9954/rosterf.png

2 个答案:

答案 0 :(得分:0)

在Android网络浏览器中,转到工具>选项>加密>查看证书以查看支持的证书提供程序列表。只要您从受支持的提供商处购买证书,您就可以执行此操作。 Here is a stack answer可能有一些线索。

答案 1 :(得分:0)

我不知道我是否得到了你真正想做的事情,但我确信至少,你需要一些Get / Post操作来执行身份验证过程并检索数据/信息。请检查以下方法:

public StringBuilder post(String url, List<NameValuePair> nvps) {
    try {
        HttpPost httppost = new HttpPost(url);
        // if there is cookies, set then
        if (cookies != null && cookies.size() > 0) {
            String cookieString = "";
            for (int i = 0; i < cookies.size(); ++i) {
                cookieString += cookies.get(i).getName() + "=" + cookies.get(i).getValue() + "; ";
            }
            cookieString += "domain=" + Constants.BaseUrl + "; " + "path=/";
            httppost.addHeader("Cookie", cookieString);
        }
        // connection timeout options
        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, Constants.timeoutConnection);
        HttpConnectionParams.setSoTimeout(httpParameters, Constants.timeoutSocket);
        // setup the post method
        DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
        httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
        HttpResponse response = httpClient.execute(httppost);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
        StringBuilder builder = new StringBuilder();
        for (String line = null; (line = reader.readLine()) != null;)
            builder.append(line).append("\n");
        // set cookies
        List<Cookie> incomingCookies = httpClient.getCookieStore().getCookies();
        for (int i = 0; incomingCookies != null && i < incomingCookies.size(); i++) {
            cookies.add(incomingCookies.get(i));
        }
        return builder;
    } catch (UnsupportedEncodingException e) {
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    } catch (Exception e) {
    }
    return null;
}

上面的方法在 url 字符串参数中执行帖子,使用配对值 nvps 作为标头的参数。请注意,常量类是您为WebService声明静态字符串(例如API条目)的类,字段 cookies 是一个Cookie列表,它将保留您的WebService会话问题。此方法将作为字符串构建器对象返回POST请求的结果。基本上,它是一种可以在几种情况下使用的通用方法,您应该做很少的调整以适应任务。您可以使用验证

另一个重要方法是Http GET:

public StringBuilder get(String url) {
    try {
        HttpGet httpget = new HttpGet(url);
        // if there is cookies, set then
        if (cookies != null && cookies.size() > 0) {
            String cookieString = "";
            for (int i = 0; i < cookies.size(); ++i) {
                cookieString += cookies.get(i).getName() + "=" + cookies.get(i).getValue() + "; ";
            }
            cookieString += "domain=" + Constants.BaseUrl + "; " + "path=/";
            httpget.addHeader("Cookie", cookieString);
        }
        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, Constants.timeoutConnection);
        HttpConnectionParams.setSoTimeout(httpParameters, Constants.timeoutSocket);
        DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
        HttpResponse response = httpClient.execute(httpget);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
        StringBuilder builder = new StringBuilder();
        for (String line = null; (line = reader.readLine()) != null;)
            builder.append(line).append("\n");
        // set cookies
        List<Cookie> incomingCookies = httpClient.getCookieStore().getCookies();
        for (int i = 0; incomingCookies != null && i < incomingCookies.size(); i++) {
            cookies.add(incomingCookies.get(i));
        }
        return builder;
    } catch (UnsupportedEncodingException e) {
    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    } catch (Exception e) {
    }
    return null;
}

这一步做了类似的步骤,但目的却截然不同。考虑到您已经过身份验证或不需要身份验证过程,这个目标是检索信息。它以字符串构建器的形式返回请求的数据。

请注意,除了这些方法非常通用之外,您还必须仔细检查所请求网页中使用的过程是什么。希望它能以某种方式帮助你! ; - )