通過(guò)COM來(lái)獲取CookieContainer,簡(jiǎn)單又好用
時(shí)間:2008-09-20 01:07:00 來(lái)源:無(wú)憂考網(wǎng) [字體:小 中 大]
最近在做一個(gè)通過(guò)HttpWebRequest來(lái)實(shí)現(xiàn)登陸和自動(dòng)發(fā)信息的小軟件,雖然還沒有實(shí)現(xiàn),但是今天從一個(gè)老外的網(wǎng)站上看到了一個(gè)獲取CookieContainer很好的方法,拿出來(lái)共享一下,這是我看到過(guò)代碼最少而且很不錯(cuò)的了。
1using System;
2using System.Runtime.InteropServices;
3using System.Text;
4using System.Net;
5
6namespace NExplus.NSiter
7{
8 /**////
9 /// 獲取Cookie的方法類。
10 ///
11 public class CookieManger
12 {
13 /**////
14 /// 通過(guò)COM來(lái)獲取Cookie數(shù)據(jù)。
15 ///
16 /// 當(dāng)前網(wǎng)址。
17 /// CookieName.
18 /// 用于保存Cookie Data的 實(shí)例。
19 /// Cookie大小。
20 ///如果成功則返回true ,否則返回false 。
21 [DllImport("wininet.dll", SetLastError = true)]
22 public static extern bool InternetGetCookie(
23 string url, string cookieName,
24 StringBuilder cookieData, ref int size);
25 /**////
26 /// 獲取當(dāng)前 的 實(shí)例。
27 ///
28 /// 當(dāng)前 地址。
29 ///當(dāng)前 的 實(shí)例。
30 public static CookieContainer GetUriCookieContainer(Uri uri) {
31 CookieContainer cookies = null;
32
33 // 定義Cookie數(shù)據(jù)的大小。
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 // 確信有足夠大的空間來(lái)容納Cookie數(shù)據(jù)。
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} 是不是相當(dāng)簡(jiǎn)單阿,希望對(duì)大家有一點(diǎn)用處。
1using System;
2using System.Runtime.InteropServices;
3using System.Text;
4using System.Net;
5
6namespace NExplus.NSiter
7{
8 /**////
9 /// 獲取Cookie的方法類。
10 ///
11 public class CookieManger
12 {
13 /**////
14 /// 通過(guò)COM來(lái)獲取Cookie數(shù)據(jù)。
15 ///
16 /// 當(dāng)前網(wǎng)址。
17 /// CookieName.
18 /// 用于保存Cookie Data的
19 /// Cookie大小。
20 ///
21 [DllImport("wininet.dll", SetLastError = true)]
22 public static extern bool InternetGetCookie(
23 string url, string cookieName,
24 StringBuilder cookieData, ref int size);
25 /**////
26 /// 獲取當(dāng)前
27 ///
28 /// 當(dāng)前
29 ///
30 public static CookieContainer GetUriCookieContainer(Uri uri) {
31 CookieContainer cookies = null;
32
33 // 定義Cookie數(shù)據(jù)的大小。
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 // 確信有足夠大的空間來(lái)容納Cookie數(shù)據(jù)。
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} 是不是相當(dāng)簡(jiǎn)單阿,希望對(duì)大家有一點(diǎn)用處。