Asp.nethttp请求获取站点任意Cookie
搞Asp.net的朋友,难免会有需要发送一些http请求,网页数据抓取的时候! 有一些安全性相对做得比较好点的站点,某些东西做得相对比较“安全”!! 对于做WINDOWS平台下开发的朋友来说,了解windows原理,一些window的API、 这会大大提示您的编程效率,我个人觉得,用好 Window API 非常的有必要,也是程序员的必备知识 wininet.dll ----------------------------------------------------------------------------------------- 搞C,C++的程序员,不会陌生吧、这个组件概而言之 就是对 internet ,ftp , http 底层做基础封装的编程接口!!!!!! ////// 获取Cookie的方法类。 /// public class CookieUtility { ///url :你请求的站点地址、 ///cookieName:cookie名称,获取全部cookie传null、 ///cookieData:cookie数据保存对象,数据会保存到这个对象中。 ///size:获取到的实际数据大小。 [DllImport("wininet.dll", SetLastError = true)] public static extern bool InternetGetCookie(string url, string cookieName, StringBuilder cookieData, ref int size); ///url :你请求的站点地址、 ///cookieName:cookie名称,获取全部cookie传null、(建议传null) ///cookieData:cookie数据保存对象,数据会保存到这个对象中。 ///size:获取到的实际数据大小。 ///dwFlags:cookie的标志(位或运算,目前我接触到的只有: /// (0x00002000,httpreadonly) /// lpReserved:保留参数对象(有知道的朋友请留言回复下,谢谢!) [DllImport("wininet.dll", CharSet=CharSet.Auto, SetLastError = true)] static extern bool InternetGetCookieEx(string url, string cookieName, StringBuilder cookieData, ref int size, int dwFlags, object lpReserved); [DllImport("Kernel32.dll", SetLastError = true)] private static extern int GetLastError(); /// 下面这个方法是获取到cookie后,对cookie字符串进行拆分重组的。 public static CookieContainer GetUriCookieContainer(Uri uri) { CookieContainer cookies = null; int datasize = 2048; StringBuilder cookieData = new StringBuilder(datasize); if (!InternetGetCookie(uri.ToString(), null, cookieData, ref datasize)) { int errCode = GetLastError(); if (datasize < 0) return null; cookieData = new StringBuilder(datasize); if (!InternetGetCookie(uri.ToString(), null, cookieData, ref datasize)) { errCode = GetLastError(); return null; } } if (cookieData.Length > 0) { cookies = new CookieContainer(); string[] cooks = cookieData.ToString().Split(';'); for (int i = 0; i < cooks.Length; i++) { if (cooks[i].IndexOf(',') == -1) cookies.SetCookies(uri, cooks[i]); } } return cookies; } public static string GetCookiesString(CookieContainer cookies, Uri uri) { if (cookies == null || uri == null) return ""; CookieCollection cc = cookies.GetCookies(uri); string szCookies = ""; foreach (Cookie cook in cc) { szCookies = szCookies + cook.Name + "=" + cook.Value + ";"; } return szCookies; } }
本文标题:Asp.nethttp请求获取站点任意Cookie
文章网址:http://azwzsj.com/article/gehjho.html