110,545
社区成员
发帖
与我相关
我的任务
分享
[System.Runtime.InteropServices.DllImport("wininet.dll", SetLastError = true)]
public static extern bool InternetGetCookie(string url, string cookieName,StringBuilder cookieData, ref int size);
private static int INTERNET_COOKIE_HTTPONLY = 0x00002000;
[System.Runtime.InteropServices.DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetGetCookieEx(string pchURL, string pchCookieName,
StringBuilder pchCookieData, ref System.UInt32 pcchCookieData,
int dwFlags, IntPtr lpReserved);
public static CookieContainer GetUriCookieContainer(Uri uri)
{
CookieContainer cookies = null;
//定义Cookie数据的大小。
int datasize = 256;
StringBuilder cookieData = new StringBuilder(datasize);
if (!InternetGetCookie(uri.ToString(), null, cookieData, ref datasize))
{
if (datasize < 0) return null;
// 确信有足够大的空间来容纳Cookie数据。
cookieData = new StringBuilder(datasize);
if (!InternetGetCookie(uri.ToString(), null, cookieData, ref datasize)) return null;
}
try
{
string SessionId = GetSessionId( uri.ToString());
if (SessionId.Trim().Length > 0)
{
cookieData.Append(";"+SessionId);
}
}
catch{}
if (cookieData.Length > 0)
{
cookies = new CookieContainer();
cookies.SetCookies(uri, cookieData.ToString().Replace(';', ','));
}
return cookies;
}
public static string GetSessionId(string url)
{
return GetCookie( url,"ASP.NET_SessionId");
}
public static string GetCookie(string url,string cookieName)
{
System.UInt32 size = 256;
StringBuilder cookie = new StringBuilder(256);
InternetGetCookieEx(url, cookieName, cookie, ref size,
INTERNET_COOKIE_HTTPONLY, IntPtr.Zero);
return cookie.ToString();
}
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Net;
using System.Linq;
using System.Collections.Generic;
namespace PCTools
{
/**/
///<summary>
/// 获取Cookie的方法类。
///</summary>
public class CookieManger
{
[DllImport("wininet.dll", SetLastError = true)]
public static extern bool InternetGetCookie(string url, string cookieName,StringBuilder cookieData, ref int size);
public static CookieContainer GetUriCookieContainer(Uri uri)
{
CookieContainer cookies = null;
//定义Cookie数据的大小。
int datasize = 256;
StringBuilder cookieData = new StringBuilder(datasize);
if (!InternetGetCookie(uri.ToString(), null, cookieData, ref datasize))
{
if (datasize < 0) return null;
// 确信有足够大的空间来容纳Cookie数据。
cookieData = new StringBuilder(datasize);
if (!InternetGetCookie(uri.ToString(), null, cookieData, ref datasize)) return null;
}
if (cookieData.Length > 0)
{
cookies = new CookieContainer();
cookies.SetCookies(uri, cookieData.ToString().Replace(';', ','));
}
return cookies;
}
public static void PrintCookies(CookieContainer cookies, Uri uri)
{
CookieCollection cc = cookies.GetCookies(uri);
foreach (var cook in cc)
{
Console.WriteLine(cook);
}
}
}
public class Test
{
static void Main(string[] args)
{
string url = @"http://www.kaixin001.com/";
Uri uri = new Uri(url);
CookieContainer cookies = CookieManger.GetUriCookieContainer(uri);
CookieManger.PrintCookies(cookies,uri);
Console.ReadKey();
}
}
}