c# http编程 2010-06-18 11:10 ============================================================ using System; using System.Net; using System.IO; using System.Text; class Test { [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 // string url = "http://localhost/csdn2/1.asp"; // <% // if request("aa")="zhuye" then session("ok")="ok" // if session("ok")="ok" then // response.write("登录") // else // response.write("没有登录") // end if // %> string indata = "aa=zhuye"; string outdata = ""; CookieContainer myCookieContainer = new CookieContainer(); //新建一个CookieContainer来存放Cookie集合 HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create(url); //新建一个HttpWebRequest myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; myHttpWebRequest.ContentLength = indata.Length; myHttpWebRequest.Method = "POST"; myHttpWebRequest.CookieContainer = myCookieContainer; //设置HttpWebRequest的CookieContainer为刚才建立的那个myCookieContainer Stream myRequestStream = myHttpWebRequest.GetRequestStream(); StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); myStreamWriter.Write(indata); //把数据写入HttpWebRequest的Request流 myStreamWriter.Close(); myRequestStream.Close(); //关闭打开对象 HttpWebResponse myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse(); //新建一个HttpWebResponse myHttpWebResponse.Cookies = myCookieContainer.GetCookies(myHttpWebRequest.RequestUri); //获取一个包含url的Cookie集合的CookieCollection Stream myResponseStream = myHttpWebResponse.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312")); outdata = myStreamReader.ReadToEnd(); //把数据从HttpWebResponse的Response流中读出 myStreamReader.Close(); myResponseStream.Close(); Console.WriteLine(outdata); //显示"登录" //拿到了Cookie,再进行请求就能直接读取到登录后的内容了 myHttpWebRequest = (HttpWebRequest) WebRequest.Create(url); myHttpWebRequest.CookieContainer = myCookieContainer;//* //刚才那个CookieContainer已经存有了Cookie,把它附加到HttpWebRequest中则能直接通过验证 myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse(); myHttpWebResponse.Cookies = myCookieContainer.GetCookies(myHttpWebRequest.RequestUri); myResponseStream = myHttpWebResponse.GetResponseStream(); myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312")); outdata = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); Console.WriteLine(outdata); //再次显示"登录" //如果把*行注释调,就显示"没有登录" } }注释写得很明确了,不多罗嗦了。 补充:如果是以get方式登录的话,直接修改url就可以了,indate可以不写任何东西。(不要去修改 myHttpWebRequest.Method为GET),比如把asp文件修改为 if request.querystring("aa")="zhuye" then session("ok")="ok",只要修改url为 string url="http://localhost/csdn2/1.asp?aa=zhuye";即可。 ============================================================================= 登录校内网的代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string Txt=""; Login(UserName.Text, UserPwd.Text, LoginUrl.Text, out Txt); //获取登录后的页面数据 textBox2.Text = Txt; //判断该页面数据是否是登陆后的数据就可以判断是否登录成功了 //由于都是字符串操作就没有必要写了呵呵 } public void Login(string UserName, string UserPwd, string LoginUrl, out string Txt) { try { //定义Cookie容器 CookieContainer CookieArray = new CookieContainer(); //创建Http请求 HttpWebRequest LoginHttpWebRequest = (HttpWebRequest)WebRequest.Create(LoginUrl); //登录数据 string LoginData = "email=" + UserName + "&password=" + UserPwd; //数据被传输类型 LoginHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; //数据长度 LoginHttpWebRequest.ContentLength = LoginData.Length; //数据传输方法 get或post LoginHttpWebRequest.Method = "POST"; //设置HttpWebRequest的CookieContainer为刚才建立的那个CookieArray LoginHttpWebRequest.CookieContainer = CookieArray; //获取登录数据流 Stream myRequestStream = LoginHttpWebRequest.GetRequestStream(); //StreamWriter StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Default); //把数据写入HttpWebRequest的Request流 myStreamWriter.Write(LoginData); //关闭打开对象 myStreamWriter.Close(); myRequestStream.Close(); //新建一个HttpWebResponse HttpWebResponse myHttpWebResponse = (HttpWebResponse)LoginHttpWebRequest.GetResponse(); //获取一个包含url的Cookie集合的CookieCollection myHttpWebResponse.Cookies = CookieArray.GetCookies(LoginHttpWebRequest.RequestUri); WebHeaderCollection a = myHttpWebResponse.Headers; Stream myResponseStream = myHttpWebResponse.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.Default); Txt = myStreamReader.ReadToEnd(); //把数据从HttpWebResponse的Response流中读出 myStreamReader.Close(); myResponseStream.Close(); } catch (Exception ex) { throw ex; } } }