HTTPClient模拟ASPX上的表单提交 - 无效的viewstate

时间:2011-12-03 14:25:46

标签: asp.net httpclient viewstate

我正在尝试在ASPX.NET网站上模拟表单提交。

在浏览器中访问网站时的流程如下:

1)在浏览器中,用户访问使用基本身份验证配置的http://mysite.com/

2)在正确的凭据后,将向用户显示一个带有一个输入文本框和一个按钮的表单(URL保持http://mysite.com/但正在提供的表单为Default.aspx)

3)用户输入一些文字并按提交...

4)网页重新加载...网址仍为http://mysite.com/ ...但有一个计时器会在10秒后触发并从http://mysite.com/Downloader下载文件

我正在尝试使用HTTPClient在我的程序中模拟此流程。

1)在http://mysite.com

上进行GET

2)提取隐藏的表单字段__EVENTVALIDATION和__VIEWSTATE

3)创建一个包含上述两个和其他表单字段的POST请求,并将其发送到http://mysite.com结果在无效的Viewstate异常中。

如何在HTTPClient中实现此目的?

2 个答案:

答案 0 :(得分:3)

通常的做法如下:首先,在浏览器中使用网站时,使用WireShark或Fiddler记录HTTP流量。其次,详细分析数据包跟踪,并从浏览器发送的每个GET和POST消息中收集每个HTTP头和每个HTTP有效负载。第三,尝试从您的代码发送相同的消息。发送HTTP请求后,您必须分析服务器的响应,并提取您需要插入到下一个请求中的所有数据。例如,不要忘记设置referer字段。将每个请求逐个添加到您的代码中,并在运行代码时记录流量。如果正确组合HTTP请求,那么您的请求数据包应该类似于浏览器的请求。

答案 1 :(得分:0)

我在同一场景中,我必须为外部ASPX页面创建一个POST请求。 我使用FIDDLER捕获了流量,并尝试使用在线帖子请求工具(例如https://www.codepunker.com

)来模拟通话

我无法重新创建请求...

在我看来(这需要时间)我们必须:

  1. 为源表单创建基本的webrequest
  2. 收集所有具有值的表单元素
  3. 创建提交所有元素的POST请求,包括VIEWSTATE
  4. 注意:您可能需要使用接受cookie的web客户端,请检查:

    Accept Cookies in WebClient?

    祝你好运