利用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#不可以呢?(有是有,但我们可以模拟)
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#不可以呢?(有是有,但我们可以模拟)