C# webBrowser如何获取HttpOnly的Cookie

  webBrowser1.Document.Cookie里是取不到HttpOnly的Cookie,可以通过导入wininet.dll实现读取HttpOnly的Cookie。

    using System;     
    using System.ComponentModel;     
    using System.Net;     
    using System.Runtime.InteropServices;     
    using System.Security;     
    using System.Security.Permissions;     
    using System.Text;     
        
        
    internal sealed class NativeMethods     
    {    
        #region enums     
        
        public enum ErrorFlags     
        {     
            ERROR_INSUFFICIENT_BUFFER = 122,     
            ERROR_INVALID_PARAMETER = 87,     
            ERROR_NO_MORE_ITEMS = 259     
        }     
        
        public enum InternetFlags     
        {     
            INTERNET_COOKIE_HTTPONLY = 8192, //Requires IE 8 or higher     
            INTERNET_COOKIE_THIRD_PARTY = 131072,     
            INTERNET_FLAG_RESTRICTED_ZONE = 16     
        }    
      
        #endregion    
      
        #region DLL Imports     
        
        [SuppressUnmanagedCodeSecurity, SecurityCritical, DllImport("wininet.dll", EntryPoint = "InternetGetCookieExW", CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]     
        internal static extern bool InternetGetCookieEx([In] string Url, [In] string cookieName, [Out] StringBuilder cookieData, [In, Out] ref uint pchCookieData, uint flags, IntPtr reserved);    
      
        #endregion     
    }     
        
        
    /// <SUMMARY></SUMMARY>     
    /// 取得WebBrowser的完整Cookie。     
    /// 因为默认的webBrowser1.Document.Cookie取不到HttpOnly的Cookie     
    ///      
    public class FullWebBrowserCookie     
    {     
        
        [SecurityCritical]     
        public static string GetCookieInternal(Uri uri, bool throwIfNoCookie)     
        {     
            uint pchCookieData = 0;     
            string url = UriToString(uri);     
            uint flag = (uint)NativeMethods.InternetFlags.INTERNET_COOKIE_HTTPONLY;     
        
            //Gets the size of the string builder     
            if (NativeMethods.InternetGetCookieEx(url, null, null, ref pchCookieData, flag, IntPtr.Zero))     
            {     
                pchCookieData++;     
                StringBuilder cookieData = new StringBuilder((int)pchCookieData);     
        
                //Read the cookie     
                if (NativeMethods.InternetGetCookieEx(url, null, cookieData, ref pchCookieData, flag, IntPtr.Zero))     
                {     
                    DemandWebPermission(uri);     
                    return cookieData.ToString();     
                }     
            }     
        
            int lastErrorCode = Marshal.GetLastWin32Error();     
        
            if (throwIfNoCookie || (lastErrorCode != (int)NativeMethods.ErrorFlags.ERROR_NO_MORE_ITEMS))     
            {     
                throw new Win32Exception(lastErrorCode);     
            }     
        
            return null;     
        }     
        
        private static void DemandWebPermission(Uri uri)     
        {     
            string uriString = UriToString(uri);     
        
            if (uri.IsFile)     
            {     
                string localPath = uri.LocalPath;     
                new FileIOPermission(FileIOPermissionAccess.Read, localPath).Demand();     
            }     
            else    
            {     
                new WebPermission(NetworkAccess.Connect, uriString).Demand();     
            }     
        }     
        
        private static string UriToString(Uri uri)     
        {     
            if (uri == null)     
            {     
                throw new ArgumentNullException("uri");     
            }     
        
            UriComponents components = (uri.IsAbsoluteUri ? UriComponents.AbsoluteUri : UriComponents.SerializationInfoString);     
            return new StringBuilder(uri.GetComponents(components, UriFormat.SafeUnescaped), 2083).ToString();     
        }     
    }     


 可能有用的资料:

Retrieve HttpOnly Session Cookie in WebBrowser

C#下利用WebBrowser完整获取COOKIE

 

来源:http://blog.csdn.net/smeller/article/details/7022370

加支付宝好友偷能量挖...


评论(0)网络
阅读(392)喜欢(0)Asp.Net/C#/WCF