.NET开发

本类阅读TOP10

·vs.net 2005中文版下载地址收藏
·NHibernate快速指南(翻译)
·【小技巧】一个判断session是否过期的小技巧
·通过Web Services上传和下载文件
·?dos下编译.net程序找不到csc.exe文件
·VB/ASP 调用 SQL Server 的存储过程
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·对比.NET PetShop和Duwamish来探讨Ado.NET的数据库编程模式
·Autodesk官方最新的.NET教程(一)(vb.net版)
·Duwamish深入剖析-结构篇

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
关于在WinForm里用HttpWebRequest获得某个页面,并填写页面的textbox及点击button的方法

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

方法如下:

step1:use HttpWebRequest class to request,and use HttpWebResponse get the response.

if you read the response, you can get the information including what did in the Page_load function.

step2: if you want to fill a textbox or click a button and etc..  in this page, you can repalce the response with the Message,and use HttpWebRequest class to post it to the server.The server will get what in the textbox or do the Onclick function.

Message: you can use sniffer to catch the postbag and get what in it,usually with a '&' and the webcontrol name or id.It is a format of ASPX post.

step3: use HttpWebResponse get the response.You can read the  response to get the information which did in the Onclick function.

以下代码是向一个指定的页面发送请求,填写三个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;
  }
 }




相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有