zoukankan      html  css  js  c++  java
  • 抓出设置C#的WebBrowser控件Cookie失败的元凶

    最近在以小米选购为案例来进行模拟登录,用到设置C#的WebBrowser控件Cookie达到访问选择小米手机版本的目的,如下图:

    以为导入wininet.dll

            /// <summary>
            /// 引用wininet.dll + 定义InternetSetCookie
            /// </summary>
            /// <param name="lpszUrlName">需要设置Cookie的URL</param>
            /// <param name="lbszCookieName">Cookie名称</param>
            /// <param name="lpszCookieData">Cookie数据</param>
            /// <returns>设置Cookie是否成功</returns>
            [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

    这里再加个设置Cookie的函数

            public bool SetCookie(CookieCollection ccAll)
            {
    
                foreach (Cookie cookie in ccAll)
                {
                    InternetSetCookie(
                        "http://" + cookie.Domain.ToString(),
                        cookie.Name.ToString(),
                        cookie.Value.ToString() + ";expires=Sun,22-Feb-2099 00:00:00 GMT");
                }
                return true;
            }

    就可以收工了呢,

    不成想,前有拦路虎。

    死活折腾都是这个效果,如下图:

    绝望之际,想到了在用VS2010逐过程调试的时候,发现Cookie中有的Domain值开头就是点,比如.xiaomi.com,这样肯定就不行了。写个函数把点去掉得了。

            public static string RemoveDot(string dotString)
            {
                if (dotString.StartsWith("."))
                {
                    dotString = dotString.Substring(1, dotString.Length - 1);
                }
                return dotString;
            }

    调用它:

            public bool SetCookie(CookieCollection ccAll)
            {
    
                foreach (Cookie cookie in ccAll)
                {
                    InternetSetCookie(
                        "http://" + RemoveDot(cookie.Domain.ToString()),
                        cookie.Name.ToString(),
                        cookie.Value.ToString() + ";expires=Sun,22-Feb-2099 00:00:00 GMT");
                }
                return true;
            }

    这样就能在选择小米手机版本页面登录成功了。

  • 相关阅读:
    CF1464C Poman Numbers
    CF1458F Range Diameter Sum
    Codeforces Round #691 (Div. 1) A~F题解&总结
    CF1458E Nim Shortcuts
    python读取当前以pdf结尾的文件并保存到excel文件里面
    vmware迁移到华三(H3C CAS 虚拟化平台)云平台
    vue+axois 封装请求+拦截器(请求锁+统一处理错误码)
    除了MD5加密,试一下签名吧
    C#---? ?? ?. ?: 好几种问号符号的使用方法
    C#---值类型为什么不能为空null
  • 原文地址:https://www.cnblogs.com/sunxin88/p/3505667.html
Copyright © 2011-2022 走看看