快速业务通道

通过COM来获取CookieContainer

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-12

最近在做一个通过HttpWebRequest来实现登陆和自动发信息的小软件,虽然还没有实现,但是今天从一个老外的网站上看到了一个获取CookieContainer很好的方法,拿出来共享一下,这是我看到过代码最少而且很不错的了。

 1using System;
 2using System.Runtime.InteropServices;
 3using System.Text;
 4using System.Net;
 5
 6namespace NExplus.NSiter
 7{
 8    /// <summary>
 9    /// 获取Cookie的方法类。
10    /// </summary>

11    public class CookieManger
12    {
13        /// <summary>
14        /// 通过COM来获取Cookie数据。
15        /// </summary>
16        /// <param name="url">当前网址。</param>
17        /// <param name="cookieName">CookieName.</param>
18        /// <param name="cookieData">用于保存Cookie Data的<see cref="StringBuilder"/>实例。</param>
19        /// <param name="size">Cookie大小。</param>
20        /// <returns>如果成功则返回<c>true</c>,否则返回<c>false</c></returns>

21        [DllImport("wininet.dll", SetLastError = true)]
22        public static extern bool InternetGetCookie(
23          string url, string cookieName,
24          StringBuilder cookieData, ref int size);
25        /// <summary>
26        /// 获取当前<see cref="Uri"/><see cref="CookieContainer"/>实例。
27        /// </summary>
28        /// <param name="uri">当前<see cref="Uri"/>地址。</param>
29        /// <returns>当前<see cref="Uri"/><see cref="CookieContainer"/>实例。</returns>

30        public static CookieContainer GetUriCookieContainer(Uri uri) {
31            CookieContainer cookies = null;
32
33            // 定义Cookie数据的大小。
34            int datasize = 256;
35            StringBuilder cookieData = new StringBuilder(datasize);
36
37            if (!InternetGetCookie(uri.ToString(), null, cookieData,
38              ref datasize)) {
39                if (datasize < 0)
40                    return null;
41
42                // 确信有足够大的空间来容纳Cookie数据。
43                cookieData = new StringBuilder(datasize);
44                if (!InternetGetCookie(uri.ToString(), null, cookieData,
45                  ref datasize))
46                    return null;
47            }

48
49
50            if (cookieData.Length > 0{
51                cookies = new CookieContainer();
52                cookies.SetCookies(uri, cookieData.ToString().Replace('';'''',''));
53            }

54            return cookies;
55        }

56
57    }

58}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号