C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie
来源:互联网 发布:linux sqlite 编辑:程序博客网 时间:2024/06/05 06:39
网上找到的可以完整获取Cookie的方法,转载一下希望能帮助更多人. 亲测可用
在Winform中使用WebBrowser控件获取网站的Cookie有时候是不完整的,默认调用Document.Cookie也取不到Cookie,其中就是因为有些网站对于关键Cookie做了保护,为Cookie加上了HttpOnly的属性,HttpOnly可以防止cookie被“读取”,这时我们就需要利用WIN API用来辅助获取网站的完整Cookie了。
using System;using System.ComponentModel;using System.Net;using System.Runtime.InteropServices;using System.Security;using System.Security.Permissions;using System.Text;namespace Freecms{ 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(); } }}调用方法(webBrowser1.Url为webBrowser1控件登陆后包含cookie信息的Url):
string pCookie=Freecms.FullWebBrowserCookie.GetCookieInternal(webBrowser1.Url, false);
阅读全文
0 0
- C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie
- C#利用WebBrowser获取完整COOKIE介绍 (转帖)
- paip.C#.NET利用WebBrowser获取完整COOKIE
- c# webbrowser 设置cookie
- 在WebBrowser中Cookie的获取与提交
- 如何获取webbrowser的cookie
- C#获取webbrowser源码
- c# webbrowser获取cookies
- C#调用WIN API
- C#在WebBrowser下获取完整的Cookies(包括含HTTPOnly属性的)
- C++ 模拟封装Win API
- 模拟网站登录 cookie
- 模拟登陆。获取了Cookie凭证,c#版本
- 用webbrowser模拟登陆
- VB通过webbrowser获取httponly的cookie
- c# webBrowser 获取Ajax信息
- c# webBrowser 获取Ajax信息 .
- C# WebBrowser 之 按键获取
- Centos 7.5 YUM安装Mysql
- kaptcha生成验证码
- android 获取当前显示的activity和收起虚拟键盘
- 哈弗曼树:最短电文
- keil MDK 输出map文件分析
- C#用WebBrowser与WIN API辅助模拟获取网站完整Cookie
- 【架构】了解微服务
- Windows桌面应用程序(1-2-1-1st) 准备你的开发环境
- 面试小故事
- 【MySQL】20个经典面试题
- JAVAWEB第七天java基础加强(二)
- Android进阶——借助简单便捷的ActivityLifecycleCallbacks实现全周期监听Activity
- 利用Jenkins玩转Android自动打包发包
- swap字符串浅谈