java怎么获取ie浏览器的cookie,.net 获取浏览器Cookie(包括HttpOnly)实例分享

一、接口文件

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类

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

{

///

/// 取得WebBrowser的完整Cookie。

/// 因为默认的webBrowser1.Document.Cookie取不到HttpOnly的Cookie

/// IE7不兼容,IE8可以,其它未知

///

public class FullWebBrowserCookie

{

public static Dictionary GetCookieList(Uri uri, bool throwIfNoCookie)

{

Dictionary dict = new Dictionary();

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 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值