.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;
  }
  }
posted on 2009-08-19 17:22  米高佐敦  阅读(604)  评论(0编辑  收藏  举报