using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
private CookieContainer cookie = new CookieContainer();
static void Main(string[] args)
{
Program a = new Program();
string str = string.Empty;
string url = "http://172.16.7.86";//学校内网,可以修改
string userName =string.Empty;
string pswd = string.Empty;
str = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=dDwyMDY5NjM4MDg7dDw7bDxpPDE%2BOz47bDx0PDtsPGk8Mz47aTwxNT47PjtsPHQ8O2w8aTwxPjtpPDM%2BO2k8NT47aTw3PjtpPDk%2BO2k8MTE%2BO2k8MTM%2BO2k8MTU%2BO2k8MTc%2BOz47bDx0PHA8cDxsPEJhY2tJbWFnZVVybDs%2BO2w8aHR0cDovLzE3Mi4xNi43Ljg2Ly9pbWFnZXMvYmcuZ2lmOz4%2BOz47Oz47dDxwPHA8bDxCYWNrSW1hZ2VVcmw7PjtsPGh0dHA6Ly8xNzIuMTYuNy44Ni8vaW1hZ2VzL2JnMS5naWY7Pj47Pjs7Pjt0PHA8cDxsPEJhY2tJbWFnZVVybDs%2BO2w8aHR0cDovLzE3Mi4xNi43Ljg2Ly9pbWFnZXMvYmcxLmdpZjs%2BPjs%2BOzs%2BO3Q8cDxwPGw8QmFja0ltYWdlVXJsOz47bDxodHRwOi8vMTcyLjE2LjcuODYvL2ltYWdlcy9iZzEuZ2lmOz4%2BOz47Oz47dDxwPHA8bDxCYWNrSW1hZ2VVcmw7PjtsPGh0dHA6Ly8xNzIuMTYuNy44Ni8vaW1hZ2VzL2JnMS5naWY7Pj47Pjs7Pjt0PHA8cDxsPEJhY2tJbWFnZVVybDs%2BO2w8aHR0cDovLzE3Mi4xNi43Ljg2Ly9pbWFnZXMvYmcxLmdpZjs%2BPjs%2BOzs%2BO3Q8cDxwPGw8QmFja0ltYWdlVXJsOz47bDxodHRwOi8vMTcyLjE2LjcuODYvL2ltYWdlcy9iZzEuZ2lmOz4%2BOz47Oz47dDxwPHA8bDxCYWNrSW1hZ2VVcmw7PjtsPGh0dHA6Ly8xNzIuMTYuNy44Ni8vaW1hZ2VzL2JnMS5naWY7Pj47Pjs7Pjt0PHA8cDxsPEJhY2tJbWFnZVVybDs%2BO2w8aHR0cDovLzE3Mi4xNi43Ljg2Ly9pbWFnZXMvYmcxLmdpZjs%2BPjs%2BOzs%2BOz4%2BO3Q8dDw7dDxpPDM%2BO0A8LS3nlKjmiLfnsbvlnostLTvmlZnluIg75a2m55SfOz47QDwtLeeUqOaIt%2Bexu%2BWeiy0tO%2BaVmeW4iDvlrabnlJ87Pj47Pjs7Pjs%2BPjs%2BPjtsPEltZ19ETDs%2BPlIwqlnoTMFQ9azXMIyVE1Qc2S7g&Cbo_LX=%D1%A7%C9%FA&Txt_UserName="+userName+"&Txt_Password="+pswd+"&Img_DL.x=26&Img_DL.y=12";
//通过封包查看实现,wireshark分析,当然比较复杂的网站比较难以分析
string result=a.HttpPost(url,str);
// Console.WriteLine(result);
// -----------------下面为测试cookie,若使用有登陆记录的CookieCoantainer可以直接跳过登录步骤,否则不行,而且有了登录的cookie可以直接跳页,不用向浏览器那样一步步模拟
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://172.16.7.86//stdgl/cxxt/Web_Std_XQKB.aspx");
request.CookieContainer = a.cookie;//若新建cookieContainer则没有登录信息new cookieCotainer()
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));//根据服务器的编码
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
Console.WriteLine(retString);
// -------------------------------
}
private string HttpPost(string Url, string postDataStr)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
request.CookieContainer =cookie;
Stream myRequestStream = request.GetRequestStream();
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
myStreamWriter.Write(postDataStr);
myStreamWriter.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response.Cookies = cookie.GetCookies(response.ResponseUri);//与响应相关的cookie即客户端cookie中请求他的那条cookie
/* 下面语句可用来测试,没有上面一句语句的话,response是没有cookie的
foreach (Cookie cook in response.Cookies)
{
Console.WriteLine("Cookie:");
Console.WriteLine("{0} = {1}", cook.Name, cook.Value);
Console.WriteLine("Domain: {0}", cook.Domain);
Console.WriteLine("Path: {0}", cook.Path);
Console.WriteLine("Port: {0}", cook.Port);
Console.WriteLine("Secure: {0}", cook.Secure);
Console.WriteLine("When issued: {0}", cook.TimeStamp);
Console.WriteLine("Expires: {0} (expired? {1})",
cook.Expires, cook.Expired);
Console.WriteLine("Don't save: {0}", cook.Discard);
Console.WriteLine("Comment: {0}", cook.Comment);
Console.WriteLine("Uri for comments: {0}", cook.CommentUri);
Console.WriteLine("Version: RFC {0}", cook.Version == 1 ? "2109" : "2965");
// Show the string representation of the cookie.
Console.WriteLine("String: {0}", cook.ToString());
}
*/
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));//根据服务器的编码
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
public string HttpGet(string Url, string postDataStr)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
}
}
相关http数据包的结构,cookie等基本知识可以从博客园找相关文章。