当前位置:首页 > 网络编程 > 软件语言 > .NET > 如何通过COM来获取CookieContainer

如何通过COM来获取CookieContainer

点击次数:83 次 发布日期:2008-11-06 07:49:59 作者:源代码网
源代码网推荐
广告载入中
代码:

using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Net;

namespace NExplus.NSiter
{
/**//// <summary>
 /// 获取Cookie的方法类。
 /// </summary>
 public class CookieManger
 {
 /**//// <summary>
 /// 通过COM来获取Cookie数据。
 /// </summary>
 /// <param name="url">当前网址。</param>
 /// <param name="cookieName">CookieName.</param>
 /// <param name="cookieData">用于保存Cookie Data的<see cref="StringBuilder"/>实例。</param>
/// <param name="size">Cookie大小。</param>
 /// <returns>如果成功则返回<c>true</c>,否则返回<c>false</c>。</returns>
 [DllImport("wininet.dll", SetLastError = true)]
 public static extern bool InternetGetCookie(
 string url, string cookieName,
 StringBuilder cookieData, ref int size);
 /**//// <summary>
 /// 获取当前<see cref="Uri"/>的<see cref="CookieContainer"/>实例。
 /// </summary>
 /// <param name="uri">当前<see cref="Uri"/>地址。</param>
 /// <returns>当前<see cref="Uri"/>的<see cref="CookieContainer"/>实例。</returns>
 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;
 }

 }
}

源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华