zoukankan      html  css  js  c++  java
  • winform下利用webBrowser执行javascript

    目前很多网站为了防止恶意提交表单信息,大多都采用了加密的方式对提交信息进行处理,加密处理后通过POST提交给服务器验证,这种操作一般都是用Javascipt进行加密,若是我们想要正确提交表单到网站,就需要对javascipt的加密操作进行模拟。那么我们同样可以利用WebBrowser来执行JS脚本,达到加密的目的。

       就以移动MM的登录获取验证码为例子,简单描述一下WebBrowser执行JS的过程。
    jQuery.ajax({
                        url: "/portal/web/SmsRandomSendAction.do",
                        dataType: "json",
                        type: "POST",
                        data: {
                            "loginName": strEnc(loginName,"1234567","",""),
                            "type": type
                        },
                        success: function(json){
                            if (json.ret == 1) {
                                ranpastor.showMessage("两次发送下载短信间隙不能小于1分钟");
                                ranpastor.disabled(); //超出限制次数不能再次发送,不能发送
                                return;
                            }
                            if (json.ret == 0) {//确认发送短信秘密成功,可以短输入信秘吗,60秒后可再次发送
                                ranpastor.disabled();//失效
                                ranpastor.startAutomaticavAilable();//启动自动恢复有效状态
                                var  message = "验证码已发出,如您"
                                message += '<span id="resend_time_count">'+ranpastor.disabledTime+'</span>';
                                message +="秒还没有收到,请点击按钮重新获取";
                                ranpastor.showMessage(message);
                            } else {//发送失败,可重新发送
                                var message = json.message || "发送失败!"
                                if (json.ret == 5) {
                                    message = '您今天下发短信密码的次数超过最大短信密码下发次数,请使用最近一次您收到的短信密码,或者使用固定密码方式登录, 如果不记得固定密码, 请使用您的手机发送短信"CZMM"到"10658800",系统会自动为您下发新的固定密码到您手机上,谢谢您的支持!'
                                }
                                ranpastor.available();
                                ranpastor.showMessage(message);
                            }
                            return false;
                        }
    以上代码即为移动MM获取验证码所用的JS代码,我们可以在代码中看到在过程中LoginName被strEnc加密后在提交到网站的。而strEnc是http://mm.10086.cn/moneditor/cs/include/js/common/core/core.js提供的,那么我们只需要执行这个strEnc便能够得到加密后的密文。
     
    首先,我们先写一个执行strEnc的html方便我们调用。
    <html>
    <head> 
    <script type='text/javascript' src='http://mm.10086.cn/moneditor/cs/include/js/common/core/core.js'></script> 
    <script type='text/javascript'>
      function getPwd(phoneNum)  {  
      var result=strEnc(phoneNum,'1234567','','');
      return result;  } 
    </script> 
    </head> 
    <body></body>
    </html>
    

    先将窗口类设置为COM可访问

    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    public partial class FrmDemo : Form
    

     然后将之前我们写好的js代码放到WebBrowser里。

    webBrowser1.DocumentText="<html> <head>  <script type='text/javascript' src='http://mm.1008.cn/moneditor/cs/include/js/common/core/core.js'></script>  <script type='text/javascript'> function getPwd(phoneNum)  {   var result=strEnc(phoneNum,'1234567','',''); return result;  } </script> </head> <body> </body> </html>";
    到这里,准备工作就已经做完了,接下来就是调用这个js函数的问题了。
     
    在WebBrowser中,我们可以这样调用JS
    webBrowser1.Document.InvokeScript("getPwd", new object[] { "18780110000" })
    

    会返回一个object的值,函数中返回的一定是一个加密后的字符串,将它转换为string就可以了。

    注意一下,不要将调用代码写在Form_Load事件里面。

    来源:http://www.cnblogs.com/Dersoul/archive/2011/11/27/2265142.html

  • 相关阅读:
    python之高阶函数
    [第二版]多线程的发送与接收
    基本函数与结构
    unp.h
    gdb调试命令
    System V共享内存区
    Posix 共享内存区
    System V信号量
    Posix 信号量
    记录锁
  • 原文地址:https://www.cnblogs.com/huaan011/p/4173613.html
Copyright © 2011-2022 走看看