源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

.net 获取浏览器Cookie(包括HttpOnly)实例分享

  • 时间:2022-10-06 02:01 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:.net 获取浏览器Cookie(包括HttpOnly)实例分享
一、接口文件
[u]复制代码[/u] 代码如下:
using System; using System.ComponentModel; using System.Net; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Text; namespace CookieHandler {     internal sealed class INativeMethods     {         #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     } }
二、获取cookie类
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Net; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Text; namespace CookieHandler {     /// <SUMMARY></SUMMARY>     /// 取得WebBrowser的完整Cookie。     /// 因为默认的webBrowser1.Document.Cookie取不到HttpOnly的Cookie     /// IE7不兼容,IE8可以,其它未知     ///     public class FullWebBrowserCookie     {         public static Dictionary<string, string> GetCookieList(Uri uri, bool throwIfNoCookie)         {             Dictionary<string, string> dict = new Dictionary<string, string>();             string cookie = GetCookieInternal(uri, throwIfNoCookie);             Console.WriteLine("FullWebBrowserCookie - 所有cookie:" + cookie);             string[] arrCookie = cookie.Split(';');             foreach (var item in arrCookie)             {                 string[] arr = item.Split('=');                 string key = arr[0].Trim();                 string val = "";                 if (arr.Length >= 2)                 {                     val = arr[1].Trim();                 }                 if (!dict.ContainsKey(key))                 {                     dict.Add(key, val);                 }             }             Console.WriteLine("FullWebBrowserCookie - cookie已载入dict,共" + dict.Count.ToString() + "项");             return dict;         }         public static string GetCookieValue(string key, Uri uri, bool throwIfNoCookie)         {             Console.WriteLine("GetCookieValue");             Dictionary<string, string> dict = GetCookieList(uri, throwIfNoCookie);             if (dict.ContainsKey(key))             {                 return dict[key];             }             return "";         }         [SecurityCritical]         public static string GetCookieInternal(Uri uri, bool throwIfNoCookie)         {             Console.WriteLine("GetCookieInternal");             uint pchCookieData = 0;             string url = UriToString(uri);             uint flag = (uint)INativeMethods.InternetFlags.INTERNET_COOKIE_HTTPONLY;             //Gets the size of the string builder                  if (INativeMethods.InternetGetCookieEx(url, null, null, ref pchCookieData, flag, IntPtr.Zero))             {                 pchCookieData++;                 StringBuilder cookieData = new StringBuilder((int)pchCookieData);                 //Read the cookie                      if (INativeMethods.InternetGetCookieEx(url, null, cookieData, ref pchCookieData, flag, IntPtr.Zero))                 {                     DemandWebPermission(uri);                     return cookieData.ToString();                 }             }             int lastErrorCode = Marshal.GetLastWin32Error();             if (throwIfNoCookie || (lastErrorCode != (int)INativeMethods.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();         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部