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

搞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;
        }
    }
时间: 2024-08-27 16:52:20

Asp.net http 请求获取站点任意Cookie的相关文章

JAVA--利用HttpClient模拟浏览器登陆请求获取响应的Cookie

在通过java采集网页数据时,我们常常会遇到这样的问题: 站点需要登陆才能访问 而这种网站,一般都会对请求进行账号密码的验证,验证的方式也有多种,需要具体分析. 今天分析其中的一种情况: 站点对登陆密码进行动态加密,作为Cookie响应给客户端,之后的请求需要携带加密后的密码进行访问 登陆成功的响应头如下图: 之后的请求头: 因为每次登陆生成一个新的加密密码,所以之前的密码会失效 所以,需要在每次采集之前,先模拟登陆获取响应的密码,再作为cookie继续请求,我们选择采用HttpClient模拟

Asp.net Request方法获取客户端的信息

Response.Write("客户端计算机名:" + Request.UserHostName + "<BR />"); Response.Write("客户端IP:" + Request.UserHostAddress + "<BR />"); Response.Write("浏览器:" + Request.Browser.Browser + "<BR />

【IIS】我所理解的IIS处理ASP.NET页面请求过程

众所周知,一个完整的动态网页的从请求到响应无非包括以下3个步骤: 1.浏览器客户端发出http请求. 2.IIS服务端接受请求. 3.处理请求并输出请求结果到浏览器客户端. 首先,简单的说说我所理解的IIS,它依赖于Windows服务World Wide Web Publish Service的,并依赖于进程w3wp.exe的.也就是说IIS的运行离不开工作进程w3wp.exe,同时每个IIS站点下的应用程序都是被用用程序池进行隔离,应用程序池即w3wp.exe的容器,通过池隔离的机制保证当某个

ASP.NET Core 认证与授权[2]:Cookie认证

来源:https://www.cnblogs.com/RainingNight/p/cookie-authentication-in-asp-net-core.html 由于HTTP协议是无状态的,但对于认证来说,必然要通过一种机制来保存用户状态,而最常用,也最简单的就是Cookie了,它由浏览器自动保存并在发送请求时自动附加到请求头中.尽管在现代Web应用中,Cookie已略显笨重,但它依然是最为重要的用户身份保存方式.在 上一章 中整体的介绍了一下 ASP.NET Core 中的认证流程,而

Asp.net Core认证和授权:Cookie认证

这里我只是记录下自己在学习中的点滴和一些不懂的地方 Cookie一般是用户网站授权,当用户访问需要授权(authorization)的页面,程序会判断是否已经授权,并认证 添加认证代码:引入命名空间:Microsoft.AspNetCore.Authentication.Cookies; 添加服务 publicvoidConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion

asp.net内置对象session和cookie

1.各个机器的session对象不同,不同浏览器之间不通用(换个浏览器,是个新的session). 2.session状态对象起始于网页打开,终止于网页关闭,生命周期有限. 3.关闭浏览器/超时的情况下,session对象即被销毁,不要放太多/太大的对象在session. 4.Web应用程序在传统意义上无状态,需要使用内置对象进行客户端状态的保存. 5.session对象和Application对象存储在服务端,cookie对象存储在客户端. 6.session对象适用于安全性相比之下较高的场合

获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据

获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpRe

ASP模拟POST请求异步提交数据的方法

这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限制了GET方式,只能通过POST数据提交,这个时候我们可以通过asp来实现模拟提交post数据,网上有挺多这样的例子的.下面的是我自己写的比较简洁易懂的函数. 首先,需要一个编码设置的函数,因为asp一般为gbk的,而标准的网站现在大都使用utf-8的.所以需要转换. 代码如下: function

ASP.net 资源请求漏洞利用工具PadBuster

ASP.net 资源请求漏洞利用工具PadBuster 在ASP.net 网站中,为了便于部署网站项目,开发者往往会将资源(图片.Javascript文件)嵌入到dll文件中.而网页中,会使用WebResource.axd?d=XXX的形式请求资源.其中,XXX采用CBC-R加密的方式生成的访问密钥.由于CBC-R算法存在Padding Oracle漏洞,所以导致渗透人员可以非法访问网站敏感文件,如web.config.PadBuster是Kali Linux提供的一款专向工具.该工具使用Per