当前位置:首页 >.NET > 正文内容

C#下利用WebBrowser完整获取COOKIE

大滑稽11年前 (2014-03-24).NET1216

 在WebBrowser下对网页进行操作其实是一件挺轻松的事情,他可以很方便实现自定义的网站访问习惯。而WebBrowser毕竟是对MS原生控件的封装,当我们使用C#下的WebBrowser尤其是这样,虽然他可以更方便大家去掉用,但是他的方便却是牺牲了灵活性为代价的。

有一天我想使用WebBrowser获取一个网站的COOKIE,在调用Document.Cookie时,发现无法完整获取其COOKIE,百思不得其解,这么简单的功能,WebBrowser也会秀逗。经过抓包分析,发现原来该网站对写入到用户端关键的Cookie,加入httponly

HttpOnly,其实是一个提高WEB网站应用程序安全性的一个功能,但是大家往往都把他给忽略掉了。比如在ASP.NET 2.0的web.config的配制文件里就提供这个子的设置


 就是这个小小的设置,令WebBrowser拿他却是没辙,查了大量资料,要想实现这个功能,一定需要实现对最原始的网络流的读写,这种方法对很多程序员来说实现难度太大了。下面就教大家实现一个很简单的实现方法

        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved);

        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern bool InternetSetCookieEx(string lpszURL, string lpszCookieName, string lpszCookieData, int dwFlags, IntPtr lpReserved);

        private static string GetCookieString(string url)
        {
            uint num = 256;
            StringBuilder stringBuilder = new StringBuilder((int)num);
            string result;
            if (!InternetGetCookieEx(url, null, stringBuilder, ref num, 0x2000, IntPtr.Zero))
            {
                if (num < 0)
                {
                    result = null;
                    return result;
                }
                stringBuilder = new StringBuilder((int)num);
                if (!InternetGetCookieEx(url, null, stringBuilder, ref num, 0x2000, IntPtr.Zero))
                {
                    result = null;
                    return result;
                }
            }
            result = stringBuilder.ToString();
            return result;
        }

        private static bool SetCookieString(string url, string cookie)
        {
            try
            {
                bool flag = InternetSetCookieEx(url, null, cookie, 0x2000, IntPtr.Zero);
                return flag;
            }
            catch (Exception)
            {
                return false;
            }
        }


扫描二维码推送至手机访问。

版权声明:本文由第★一★次发布,如需转载请注明出处。

本文链接:https://wpers.net/post/58.html

“C#下利用WebBrowser完整获取COOKIE” 的相关文章

Cbo控件数据源绑定

 //Cbo控件数据源绑定DataTable DtType = noteType.GetTypeList("");         ...

C#遍历控件的方法

首先,要想遍历,就必须找到你想找的表单里面的所有控件,然后一个个的逐一比对,当找到了你需要的控件的时候,再做你需要的操作。1、foreach方法foreach (Control control in ...

c#中分页显示数据

     //c#中分页显示数据    public partial class Form1 : Form    {  ...

C#修改浏览器主页

string key = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main";      &n...

C#获得程序集

 //获得程序集System.Reflection.Assembly assem = System.Reflection.Assembly.GetExecutingAssembly();...

获取Color的几种方式

//获取Color的几种方式Color.FromKnownColor(KnownColor.ControlLight);Color.FromArgb(int r,int g,int b);Color.FromArgb(int a,int r...