.Net/C# 应用程序直接读取本地 Cookies 文件(WinXP SP2 调用 API: InternetGetCookie 无果) using System; using System.IO; using System.Text; using System.Text.RegularExpressions; using Microsoft.Win32; public class Class1 { static void Main(string[] args) { System.Console.WriteLine(GetCookiesFromFiles("et8")); //支持 WinXP SP2 System.Console.WriteLine(GetCookie("http://bbs.et8.net")); }
[System.Runtime.InteropServices.DllImport("wininet.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)] public static extern bool InternetGetCookie(string lpszUrlName,string lpszCookieName,StringBuilder lpszCookieData,ref int lpdwSize);
[System.Runtime.InteropServices.DllImport("kernel32.dll")] internal static extern Int32 GetLastError();
public static string GetCookie(string url) //Win32 API { int size = 1000; StringBuilder sb = new StringBuilder(size);
if (!InternetGetCookie(url,"", sb,ref size)) { Console.WriteLine("Error code:{0}", GetLastError()); } return sb.ToString(); }
public static string GetCookiesFromFiles(string MasterDomain) //Cookies File { string S = null; RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", false); if (key != null) { string val = (string) key.GetValue("Cookies"); if (val!= null) { string[] F = Directory.GetFiles(val); string s = null; int i; Regex r = new Regex(@".*@" + MasterDomain + @"*\[\d+\].txt"); for (i = 0; i < F.Length; i++) { if (r.IsMatch(F[i])) { s = F[i]; } } if (s != null) //s 就是最新文件 { StreamReader sr = new StreamReader(s); s = null; i = 1; while ((s = sr.ReadLine())!= null) { if (s == "*" || s == "\n") { i = 0; } //每节只读两行 if (i == 1) { S += s; } else if (i == 2) { S += "=" + s + "; "; } i++; } } } } return S; } }

|