正常情況下C#可以使用HttpWebRequest、HttpWebResponse和CookieContainer類來獲取Cookie,但是當Cookie設置為httponly,我們就不能用上面的方法獲取。這時候可以用Socket來模擬http提交。具體如下:
1.先取得默認DNS服務器地址:
IPEndPoint endPoint; IPAddress IpList; IpList = Dns.GetHostAddresses("www.7fenx.com")[0];
2.模擬http請求,設置http頭:
StringBuilder sendString=new StringBuilder(200); sendString.Append("POST "+ "/" + " HTTP/1.1\r\n"); sendString.Append("Accept: */*\r\n"); sendString.Append("Host: "+host+"\r\n"); sendString.Append("User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36\r\n"); sendString.Append("Content-Type: application/x-www-form-urlencoded\r\n"); sendString.Append("Content-Length: "+sendData.Length+"\r\n"); sendString.Append("Connection: keep-alive\r\n\r\n"); sendString.Append(postData+"\r\n");
3.發送請求
byte[] sendBytes = Encoding.GetEncoding(endcoding).GetBytes(sendString.ToString()); int httpPoint = 80; endPoint = new IPEndPoint(ip, httpPoint); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(endPoint); socket.Send(sendBytes,sendBytes.Length,0);
4.獲取服務器的返回信息
Byte[] byteReceive = new Byte[1024]; Int32 bytes = socket.Receive(byteReceive); string str = Encoding.Default.GetString(byteReceive, 0, bytes);
5.提取Cookie內容
Regex rgxCookie = new Regex("Set-Cookie:.*"); MatchCollection cookies = rgxCookie.Matches(cookie);
提取后需要做的就是解析Cookie就是一些字符串的處理。
附上網絡編程基礎知識地址:
http://www.7fenx.com/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.html
初接觸網絡編程,如果哪里說錯請指出。
歡迎加我QQ交流:1780242721,請注明:“博客園”
本文如需轉載請注明出處。