• 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录


    利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录

    tring cookie = response.Headers.Get("Set-Cookie");

           通常在响应的头信息里就包含了Cookie,它就是Set-Cookie的值。如果想要知道HTTP的头信息有哪些,可以在谷歌浏览器中按F12进行查看,但记得,要想捕捉这些信息,必须在未登录前就按F12,否则谷歌浏览器是不会跟踪这些信息的。
           然后我们就可以利用该Cookie登录网站并且得到登录后的网站内容:

    复制代码
            string html = getHtml(GetCookieName(cookie), GetCookieValue(cookie));
    
            private string GetCookieValue(string cookie)
            {
                Regex regex = new Regex("=.*?;");
                Match value = regex.Match(cookie);
                string cookieValue = value.Groups[0].Value;
                return cookieValue.Substring(1, cookieValue.Length - 2);
            }
    
            private string GetCookieName(string cookie)
            {
                Regex regex = new Regex("sulcmiswebpac.*?");
                Match value = regex.Match(cookie);
                return value.Groups[0].Value;
            }
    
            private string getHtml(string name, string value)
            {
                CookieCollection cookies = new CookieCollection();
                cookies.Add(new Cookie(name, value));
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://222.200.98.171:81/user/bookborrowed.aspx");
                request.Method = "GET";
                request.Headers.Add("Cookie", name + "=" + value);
    
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                return reader.ReadToEnd();
            }
    复制代码

         我们之前得到的cookie字符串中其实就是一个键值对字符串,我们还是需要根据正则表达式提取出cookie的name和value,然后我们定义一个CookieContainer,往里面添加我们捕捉到的Cookie,接着就是需要Cookie的网页发送一个带有该Cookie的HTTP请求。
         方法很简单,只要合理的使用正则表达式,我们就可以方便的对网页进行处理,而不需要什么第三方的库。

         每个程序员都需要学会自己造轮子而不是一味的追求轮子,就算是其他语言的轮子,我们依然可以用自己熟悉的语言实现出来,毕竟所有的语言背后的实现思想都是一样的,尤其是面向对象语言,它们都是相互借鉴的,交叉处实在是太多了,C#更是在参考java的基础上创造出来的,有什么理由是java可以C#不可以呢?(有是有,但我们可以模拟)

     
     
     
  • 相关阅读:
    Android用Application设置全局变量以及使用
    Android Spinner
    margin和padding的区别
    Java中Calendar常用方法封装
    Java中Calendar的用法以及获取当前日期的后一天
    Oracle Exists用法
    (Oracle)rownum用法详解
    Android中GestureDetector.OnGestureListener
    Java文件路径详解[转载]
    Android利用ViewFlipper实现屏幕切换动画效果
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3204471.html
Copyright © 2020-2023  润新知