码迷,mamicode.com
首页 > Windows程序 > 详细

[转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求

时间:2016-07-11 19:15:44      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:

在没有做题目中所述的内容的时候,感觉这应该是很简单的东西,但是当真正开始做的时候却发现,有很多问题
现在在这里写出来,供和我一样水平不高的参考一下。

在写本文之前参照了一下文章

欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212 
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html

C#通过webRequest保持在同一Session中Post数据 http://blog.csdn.net/crabo/archive/2005/12/08/547092.aspx

c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求
主要就组织要提交的数据,然后以post方式提交。

假设我们有如下的网页

技术分享
 1技术分享<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2技术分享
 3技术分享<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4技术分享
 5技术分享<html xmlns="http://www.w3.org/1999/xhtml" >
 6技术分享<head runat="server">
 7技术分享    <title>无标题页</title>
 8技术分享</head>
 9技术分享<body>
10技术分享    <form id="form1" runat="server">
11技术分享    <div>
12技术分享       <table>
13技术分享       <tr>
14技术分享        <td> 姓名:</td><td><asp:TextBox ID="txtName" runat="server"></asp:TextBox></td>
15技术分享       </tr>
16技术分享              <tr>
17技术分享        <td> 昵称:</td><td><asp:TextBox ID="txtPwd" runat="server" TextMode="Password" Width="149px"></asp:TextBox></td>
18技术分享       </tr>
19技术分享       </table>
20技术分享        <asp:Button ID="btnUpdate" runat="server" Text="Longon" OnClick="btnUpdate_Click" Width="60px" />
21技术分享        <asp:Button ID="btnClose" runat="server" OnClick="btnClose_Click" Text="Close" /><br />
22技术分享    
23技术分享    </div>
24技术分享    </form>
25技术分享</body>
26技术分享</html>

用IE访问这个页面的时候可以得到如下的输出

技术分享
 1技术分享
 2技术分享
 3技术分享<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4技术分享
 5技术分享<html xmlns="http://www.w3.org/1999/xhtml" >
 6技术分享<head><title>
 7技术分享    无标题页
 8技术分享</title></head>
 9技术分享<body>
10技术分享    <form name="form1" method="post" action="Default.aspx" id="form1">
11技术分享<div>
12技术分享<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTg4ODA4NDE0NmRk6Ma0MaCJKrrNLGLfO4qYNezoxY4=" />
13技术分享</div>
14技术分享
15技术分享    <div>
16技术分享       <table>
17技术分享       <tr>
18技术分享        <td> 姓名:</td><td><input name="txtName" type="text" id="txtName" /></td>
19技术分享       </tr>
20技术分享              <tr>
21技术分享        <td> 昵称:</td><td><input name="txtPwd" type="password" id="txtPwd" style="width:149px;" /></td>
22技术分享       </tr>
23技术分享       </table>
24技术分享        <input type="submit" name="btnUpdate" value="Logon" id="btnUpdate" style="width:60px;" />
25技术分享        <input type="submit" name="btnClose" value="Close" id="btnClose" /><br />
26技术分享    
27技术分享    </div>
28技术分享    
29技术分享<div>
30技术分享
31技术分享    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQKcopufDgLEhISFCwKd+7qdDgLynailDAKT+PmaCJleqITXMfQuE9LK49YoxHV2oTzQ" />
32技术分享</div></form>
33技术分享</body>
34技术分享</html>
35技术分享


由上面的代码可以看出除了txtName,txtPwd以及两个按钮外,多出了两个__VIEWSTATE,__EVENTVALIDATION这四个表单需要提交到的,要模拟哪个按钮,在加上哪个按钮的表单的值就可以了,如:btnUpdate=Logon

在拼接提交的字符串的时候注意一下,用System.Web.HttpUtility.UrlEncode方法转换成Url编码的字符串。
下面是针对这个页面的btnUpdate按钮的提交数据

 1 string __VIEWSTATE = "/wEPDwUKMTg4ODA4NDE0NmRk6Ma0MaCJKrrNLGLfO4qYNezoxY4=";
 2 string __EVENTVALIDATION = "/wEWBQKcopufDgLEhISFCwKd+7qdDgLynailDAKT+PmaCJleqITXMfQuE9LK49YoxHV2oTzQ";
 3 
 4 __VIEWSTATE = System.Web.HttpUtility.UrlEncode(__VIEWSTATE);
 5 
 6 __EVENTVALIDATION = System.Web.HttpUtility.UrlEncode(__EVENTVALIDATION);
 7 
 8 string strPostData = String.Format("__VIEWSTATE={0}&txtName={1}&txtPwd={2}&btnUpdate=Longon&__EVENTVALIDATION={3}"
 9                             , __VIEWSTATE, this.txtName.Text, this.txtPassword.Text, __EVENTVALIDATION
10                             );


然后创建一个HttpWebRequest对象,设置提交方式是post,然后把上面准备的字符串写进请求数据流里
基本上就可以了
如果有需要在访问不同页面时保存Session的话,需要设置HttpWebRequest对象的CookieContainer属性,保证每次设置的CookieContainer都是同一个对象就可以了。
下面是这个类就是向WEB页面发出请求,并得到返回数据的类

技术分享读取网页内容


使用方法如下

技术分享
 1技术分享private WebPageReader webReader = new WebPageReader();
 2技术分享
 3技术分享string __VIEWSTATE = "/wEPDwUKMTg4ODA4NDE0NmRk6Ma0MaCJKrrNLGLfO4qYNezoxY4=";
 4技术分享string __EVENTVALIDATION = "/wEWBQKcopufDgLEhISFCwKd+7qdDgLynailDAKT+PmaCJleqITXMfQuE9LK49YoxHV2oTzQ";
 5技术分享
 6技术分享__VIEWSTATE = System.Web.HttpUtility.UrlEncode(__VIEWSTATE);
 7技术分享
 8技术分享__EVENTVALIDATION = System.Web.HttpUtility.UrlEncode(__EVENTVALIDATION);
 9技术分享
10技术分享string strPostData = String.Format("__VIEWSTATE={0}&txtName={1}&txtPwd={2}&btnUpdate=Longon&__EVENTVALIDATION={3}"
11技术分享                            , __VIEWSTATE, this.txtName.Text, this.txtPassword.Text, __EVENTVALIDATION
12技术分享                            );
13技术分享string strHTML;
14技术分享
15技术分享try
16技术分享{
17技术分享    do
18技术分享    {
19技术分享        strHTML = webReader.GetHTML("http://localhost:3517/WebSite1/Default.aspx", strPostData);
20技术分享    } while (webReader.IsKeepAlive);
21技术分享
22技术分享
23技术分享    this.richTextBox1.Text = strHTML;
24技术分享}
25技术分享catch (Exception ex)
26技术分享{
27技术分享    if (ex.InnerException != null)
28技术分享    {
29技术分享        MessageBox.Show(ex.Message + "/n" + ex.InnerException.Message);
30技术分享    }
31技术分享    else
32技术分享    {
33技术分享        MessageBox.Show(ex.Message);
34技术分享    }
35技术分享}

[转] c# 模拟Asp.net页面中的某个按钮的点击,向web服务器发出请求

标签:

原文地址:http://www.cnblogs.com/whtydn/p/5661255.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!