Asp.net http 请求获取站点任意Cookie

发布时间:2020-07-15 18:09:13 作者:点儿都不扯
来源:网络 阅读:1022
搞Asp.net的朋友,难免会有需要发送一些http请求,网页数据抓取的时候!

有一些安全性相对做得比较好点的站点,某些东西做得相对比较“安全”!!

对于做WINDOWS平台下开发的朋友来说,了解windows原理,一些window的API、

这会大大提示您的编程效率,我个人觉得,用好 Window API 非常的有必要,也是程序员的必备知识




wininet.dll 
-----------------------------------------------------------------------------------------
搞C,C++的程序员,不会陌生吧、这个组件概而言之 就是对 

internet ,ftp , http 底层做基础封装的编程接口!!!!!!



    ///<summary> 
    /// 获取Cookie的方法类。 
    ///</summary> 
    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;
        }
    }


推荐阅读:
  1. Asp.net内置对象之Request对象怎么用
  2. ASP.NET Core 反向代理如何部署

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

windows internet cookie

上一篇:用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

下一篇:友元函数 运算符重载 const static

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》