通过android webview自动登录网站的问题

Posted

技术标签:

【中文标题】通过android webview自动登录网站的问题【英文标题】:Auto logging in to website through android webview problems 【发布时间】:2012-09-28 15:34:48 【问题描述】:

我的银行有一个移动网站,我想自动登录。 这是网页https://ib.absa.co.za/ib/AuthenticateW.do?icmpid=BAC00414。

这是我目前的代码。

    browser = (WebView)findViewById(R.id.webView1);
    browser.getSettings().setjavascriptEnabled(true);

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("AccessAccount", "my_account_nr"));
        nameValuePairs.add(new BasicNameValuePair("PIN", "my_pin"));

        try 
            browser.loadData(CustomHttpClient.executeHttpPost(BASE_URL, nameValuePairs), "text/html", "utf-8");
         catch (Exception e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        

BASE_URL 是顶部的链接。我从http://code.google.com/p/virtualwalks/source/browse/trunk/virtualwalks/project7/android/CustomHttpClient.java?spec=svn177&r=177得到了 CustomHttpClient

这是网页标题:

请求网址:https://ib.absa.co.za/ib/AuthenticateW.do?icmpid=BAC00414

请求方法:GET

状态码:200 OK

请求标头查看源代码

接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3

接受编码:gzip、deflate、sdch

Accept-Language:en-US,en;q=0.8,af;q=0.6

连接:保持活动状态

主持人:ib.absa.co.za

参考:http://www.absa.mobi/

用户代理:Mozilla/5.0(Linux;U;Android 2.3.6;en-us;Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

查询字符串参数查看 URL 编码

icmpid:BAC00414

响应标头查看源代码

Cache-Control:no-cache, must-revalidate

连接:保持活动

内容编码:gzip

内容语言:zh-CN

Content-Type:text/html;charset=ISO-8859-1

日期:格林威治标准时间 2012 年 10 月 10 日星期三 07:57:50

到期时间:1970 年 7 月 12 日星期日 2:00:00 GMT

Keep-Alive:timeout=10, max=20

Pragma:no-cache

设置 Cookie:JSESSIONID=0000CTls0Onsd_DJkBrN0FLy9eq:11l21e8a2;路径=/ib;域=absa.co.za;安全

传输编码:分块

变化:接受编码,用户代理

和html代码:

<html>

Absa 手机银行

<body text="#000000" bgcolor="#FFFFFF">
    <p align="left" style="text-align:left;" class="pgHeadTop"><img src="/ib/images/wap/menu/absa_98x27.gif"  border="0"> <p align="left" style="text-align:left;" class="pgHeadBottom">Logon </p>

        <form action="https://vs1.absa.co.za/ib/AuthenticateW.do;jsessionid=0000CTls0Onsd_DJkBrN0FLy9eq:11l21e8a2" method="post" autocomplete="OFF"><input type="hidden" name="_channelIdentifier_" value="W">


                <p align="left" style="text-align:left;">
                    <p align="left" style="text-align:left;" class="tooltip">Enter your access account number</p>
                    <input type="text" name="AccessAccount" value="" maxlength="16" size ="16" istyle="4">
                </p>

            <p align="left" style="text-align:left;">
                <p align="left" style="text-align:left;" class="tooltip">Enter your PIN</p>
                <input type="password" name="PIN" value="" maxlength="5" size ="5" istyle="4">
            </p>
            <p align="left" style="text-align:left;">
                <p align="left" style="text-align:left;" class="tooltip">Enter your user number</p>
                <input type="text" name="user" value="1" maxlength="4" size ="5" istyle="4">
            </p>
            <p align="left" style="text-align:left;">
                <p align="left" style="text-align:left;" class="heading">It is your responsibility to ensure the secrecy of your PIN number.</p>
            </p>
            <p align="left" style="text-align:left;">
                <input type="submit" name="button_processPIN" value="Next &gt;" /><input type="hidden" name="processPIN_params" value="controller=com.sirius.apps.ib.view.wap.user.AuthenticateCntrl&amp;state=processPIN"/><input type="hidden" name="processPIN_encoding" value="u"/><input type="hidden" name="cmd" value="button"/>
            </p>
            <input type="hidden" name="AUTH_RND" value="a2f7ea6e">
            <input type="hidden" name="JAVASCRIPT" value="Y">
            <input type="hidden" name="LOGON" value="1">
        </form>
        <p align="left" style="text-align:left;" class="pageFooter"><a href="https://ib.absa.co.za/ib/RegisterW.do;jsessionid=0000CTls0Onsd_DJkBrN0FLy9eq:11l21e8a2?_Uid_=1&amp;_channelIdentifier_=W&amp;_language_=en" style="color:#FFFFFF;">Register</a> | <a href="https://ib.absa.co.za/ib/ContactUsW.do;jsessionid=0000CTls0Onsd_DJkBrN0FLy9eq:11l21e8a2?_Uid_=1&amp;_channelIdentifier_=W&amp;_language_=en" style="color:#FFFFFF;">Contact</a> | </p><p align="right" style="text-align:right;" class="body"><img src="/ib/images/wap/menu/barclays_84x25.gif"  border="0"></p>



</body>

如果我运行程序,它只会加载登录页面。

只是希望有人能对此有所了解,以及是否可以这样做,或者我的代码是否有问题/缺少/愚蠢。

【问题讨论】:

【参考方案1】:

它们可能与用户代理匹配,并且您在使用此自定义 http 客户端时可能没有有效的用户代理。

将用户代理设置为您的 android 浏览器使用的相同,您应该能够加载页面。

一个可能的值是:

Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2 – G1 Phone

否则,以编程方式获取它:Retrieve User-Agent programmatically

【讨论】:

感谢您的回复,但事实并非如此。通过将 BASE_URL 更改为 ib.absa.co.za/ib/…,我进一步了解了一些情况,但现在它只是加载登录页面并忽略我的自动登录尝试。对此的任何想法将不胜感激。

以上是关于通过android webview自动登录网站的问题的主要内容,如果未能解决你的问题,请参考以下文章

Instagram WebView 阻止 FB 登录

android webview如何获取网页输出的提示信息

Appium+Java自动化测试 android混合APP的webview页面截图怎么截?

自动填写 webview 中的字段

Android WebView:拦截重定向请求?

Android Webview 应用程序无法通过 Opencart 网站上的 PayPal 处理付款