最近在做一個通過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.cnblogs.com/xdotnet/archive/2007/01/08/cookie_container_com.html
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
最近在做一個通過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.cnblogs.com/xdotnet/archive/2007/01/08/cookie_container_com.html