通过COM来获取CookieContainer,简单又好用(转)
最近在做一个通过HttpWebRequest来实现登陆和自动发信息的小软件,虽然还没有实现,但是今天从一个老外的网站上看到了一个获取CookieContainer很好的方法,拿出来共享一下,这是我看到过代码最少而且很不错的了。
 1
using System;
2
using System.Runtime.InteropServices;
3
using System.Text;
4
using System.Net;
5
6
namespace 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
}
using System;2
using System.Runtime.InteropServices;3
using System.Text;4
using System.Net;5

6
namespace NExplus.NSiter7
{8
    /// <summary>9
    /// 获取Cookie的方法类。10
    /// </summary>11
    public class CookieManger12
    {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
}


    
                
            
        
浙公网安备 33010602011771号