HttpWebRequest 获取页面

来源:互联网 发布:金融专业就业前景知乎 编辑:程序博客网 时间:2024/04/30 15:30
关于在WinForm里用HttpWebRequest获得某个页面,并填写页面的textbox及点击button的方法方法如下: 
以下代码是向一个指定的页面发送请求,填写三个textbox,click一个button,并得到Server端的执行是否成功的class。注:由于页面的代码也是我写的,所以我知道将要Post页面的结构,即我知道每个页面控件的name和页面结构。


public class FtpMessage
{
     private string m_fileName;
     private string m_host;
     private string aspValue;     
     public FtpMessage(string fileName,string hostUrl)
     {
          //指定的一个信息,将用于填写TextBoxFileName。
          m_fileName = fileName;
          //指定的URL
          m_host = hostUrl;
     }
     public bool SendCompleteMessage(string user,string password)
     {
          bool isSendMessageSuccess = false;
          HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://"+m_host);
          //得到网页。
          WebResponse response = null;
          response = request.GetResponse();
          Stream readStream = response.GetResponseStream();
          StreamReader sr = new StreamReader(readStream,Encoding.GetEncoding("utf-8"));
          string content = "";
          int index = -1;
          //寻找数据
          while (index < 0 && content != null) 
          {
               content = sr.ReadLine();
               //得到标准的ASPX页面的头一共26个字节,以("name=/"__VIEWSTATE/" value=/""开始的
               index = content.IndexOf("name=/"__VIEWSTATE/" value=/"",0);
          }
          index += 26;
          int endIndex = content.LastIndexOf("/"");
          //形成目标数据。
          if (index > 26 && endIndex > index)
          {
               //得到页面数据段
               aspValue = content.Substring(index,endIndex-index);
               StringBuilder tempData = new StringBuilder();
               tempData.Append("__VIEWSTATE=");
               tempData.Append(HttpUtility.UrlEncode(aspValue));
               //填写TextBoxFileName的值,其值见后
               tempData.Append("&TextBoxFileName=");
               tempData.Append("(content1)");
               //填写TextBoxUser的值,其值见后
               tempData.Append("&TextBoxUser=");
               tempData.Append("(content2)");
               //填写TextBoxPassword的值,其值见后
               tempData.Append("&TextBoxPassword=");
               tempData.Append("(content3)");
               //填写Button Click 的Message
               tempData.Append("&ButtonForData=");
               tempData.Append(HttpUtility.UrlEncode("Message"));
               aspValue = tempData.ToString();
          }
          string content1 = m_fileName;
          string content2 = user;
          string content3 = password;
          WebResponse response1 = null;
          //替换预传送的数据。
          string tempData1 = aspValue.Replace("(content1)",HttpUtility.UrlEncode(content1));
          string tempData2 = tempData1.Replace("(content2)",HttpUtility.UrlEncode(content2));
          string tempData3 = tempData2.Replace("(content3)",HttpUtility.UrlEncode(content3));
          byte [] postData = Encoding.UTF8.GetBytes(tempData3.ToString());
          HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create("http://"+m_host);
         //设定工作属性。
          request1.Method = "POST";
          request1.ContentType = "application/x-www-form-urlencoded";
          request1.ContentLength = postData.Length;
          //上传数据。
          Stream writeStream = request1.GetRequestStream();
          writeStream.Write(postData,0,postData.Length);
          writeStream.Close();
          //下载回应消息。
          string serverMessage = "";
          try
          {
               response1 = request1.GetResponse();
               //这里的response1是Server在Button点击后跳转到的另一个页面,这个页面有一个值表示是否成功
               //我将取得其值作为函数的返回值
               Stream readStream1 = response1.GetResponseStream();
               int i = 1024;
               byte[] hehe = new byte[i];
               readStream1.Read(hehe,0,i);
               readStream1.Close();
               StringBuilder hehe1 = new StringBuilder();
               //由于我知道页面的结构,我可以从页面得到这个值。
               for(int j=658;j<662;j++)
               {
                    hehe1.Append((char)hehe[j]);
               }
               serverMessage = hehe1.ToString();
           }
           catch(Exception E)
           {
                 string tempError = E.Message;
           }
           if(serverMessage == "true")
           {
                isSendMessageSuccess = true;
           }
           return isSendMessageSuccess;
     }
}

网页部分的代码没有写,就是一个aspx的页面,先拖三个textbox上去,再拖一个button上去(都是web的,不是html的),
三个textbox依次命名为:TextBoxFileName,TextBoxUser,TextBoxPassword,
button命名为:ButtonForData,处理方法就写在这个buttonclick方法里,可以直接取this.TextBoxFileName等控件的值即可以在buttonclick里写
"string ss = this.TextBoxFileName.Text;" 
 
原创粉丝点击