asp.net 网站模拟提交(高手进!!!!)

zaizai2006 2013-05-12 11:54:40
一个asp.net 的页面 脚本 是又jquery模拟提交的,代码如下:
$.post("a/ba/c.aspx", { "load": 1 }, function (res) { 省略 }
现在 我模拟 该代码向服务器请求的过程。
public string Contentinsert(string load)
{
string uriString = "www.xxx.com/a/ba/c.aspx";
WebClient webClient = new WebClient();
byte[] responseData = webClient.DownloadData(uriString);
string srcString = Encoding.UTF8.GetString(responseData);
webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); //定义关联的标头

// 获取页面的 VeiwState 这个值和EventValidation 的值在这里用于数据接收页接收数据
string viewStateFlag = "id=\"__VIEWSTATE\" value=\""; //动态抓取__VIEWSTATE的值
int i = srcString.IndexOf(viewStateFlag) + viewStateFlag.Length;
int j = srcString.IndexOf("\"",i);
string viewState = srcString.Substring(i, j-i);

// 获取页面的 EventValidation 这个值和EventValidation 的值在这里用于数据接收页接收数据
string eventValidationFlag = "id=\"__EVENTVALIDATION\" value=\""; //动态抓取__EVENTVALIDATION\的值
i = srcString.IndexOf(eventValidationFlag) + eventValidationFlag.Length;
j = srcString.IndexOf("\"", i);
string eventValidation = srcString.Substring(i, j - i);

viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);

// 要提交的字符串数据。格式形如:user=uesr1&password=123
//下面开始执行数据的提交 当提交没有错误将返回提交后的页面代码回来
string postString = "load=" + load+ "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation;

// 将字符串转换成字节数组
byte[] postData = Encoding.ASCII.GetBytes(postString);
// 上传数据,返回页面的字节数组
responseData = webClient.UploadData(uriString, "POST", postData); //本函数的核心,这里主要解决了用POST方法传递数据以模拟表单提交~还有就是避免了提交后返回到数据接收指定的页面~是个很好的方法!!

// Encoding.GetEncoding("GB2312").GetString(responseData)
srcString = Encoding.UTF8.GetString(responseData);

return "成功提交服务器,返回数据字节为:"+srcString.Length.ToString(); //向主调函数返回数据提交后转到的页面代码长度!

///////////////////////////////////////
// 分析返回的页面
///////////////////////////////////////
// ...... ......
}

运行后 代码显示还未提交到后台,返回的html如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
<form name="form1" method="post" action="a/b/c.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZEmRrum+6S3PapB0zLLCgoiaNgqp" />
</div>


</form>

</body>
</html>

请问各位高手时怎么回事?
提交的参数"load=" + load+ "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation; 有什么不妥,请指正。
...全文
240 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaizai2006 2013-05-15
  • 打赏
  • 举报
回复
研究中。。。。。。。。。。。。。
zaizai2006 2013-05-14
  • 打赏
  • 举报
回复
cookie正确,我每次提交 都返回id为__VIEWSTATE hidden隐藏域 ,都是相同的值。这是为什么。
rayaspnet 2013-05-13
  • 打赏
  • 举报
回复
引用 2 楼 zaizai2006 的回复:
已经看了,还是不行。是需要string postString = "{\"load\": \"1247\",\"__VIEWSTATE\":" + viewState + "}"; 昨晚json字符串 提交吗。还是缺少 按钮参数。
看文章的底部,用 HttpWebRequest , 应该可以的。看看是不是需要cookie 另外,用fiddle2 检测一下正常的登陆,对比一下,就知道自己的代码提交缺什么
rayaspnet 2013-05-13
  • 打赏
  • 举报
回复
引用 楼主 zaizai2006 的回复:
提交的参数"load=" + load+ "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation; 有什么不妥,请指正。
看看这个连接 是怎样处理 viewstate 的 http://odetocode.com/articles/162.aspx 用webclint 自动登陆webform
zaizai2006 2013-05-13
  • 打赏
  • 举报
回复
已经看了,还是不行。是需要string postString = "{\"load\": \"1247\",\"__VIEWSTATE\":" + viewState + "}"; 昨晚json字符串 提交吗。还是缺少 按钮参数。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧