2010年2月24日星期三

使用WebBrowser控件Post数据

使用 WebBrowser 控件可以在 Windows 窗体应用程序中承载网页以及支持浏览器的其他文档。例如,可以使用 WebBrowser 控件在应用程序中提供基于 HTML 的集成用户帮助或 Web 浏览功能。此外,还可以使用 WebBrowser 控件向 Windows 窗体客户端应用程序添加基于 Web 的现有控件。

    WebBrowser的Navigate函数提供了向网页Post数据的功能: 

    public void Navigate(string urlString,string targetFrameName,byte[] postData,string additionalHeaders)  将指定的统一资源定位符 (URL) 处的文档加载到 WebBrowser 控件中,使用指定 HTTP 数据请求该文档并替换具有指定名称的网页框架的内容。

    其中postData为HTTP POST 数据,例如窗体数据。additionalHeaders要添加到默认标头中的 HTTP标头。一般Http表头设为"Content-Type: application/x-www-form-urlencoded "即可.

    如果要正确地向网页Post数据,并须使用以上两个参数.登陆的 Post数据可以通过Fiddler监测获得,如下图:

    如变为字符则格式如下: "__VIEWSTATE=%2FwEPDwULLTExNTc2NTI3OTlkZFQGow3nzBFSYeWWyfo%2FOEXT8w5j&UserName=admin&Password=admin123&AuthenButton=%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95&__EVENTVALIDATION=%2FwEWBALUudTOCwKvruq2CALSxeCRDwKGkaOOC8PpQ8Wk8rGROWhMJioW342WQkVO"

    则现在如果要WebBrowser打开一个登陆页面,但是向网页Post数据而自动登陆的话只需要步骤:

  String PostData="__VIEWSTATE=%2FwEPDwULLTExNTc2NTI3OTlkZFQGow3nzBFSYeWWyfo%2FOEXT8w5j&UserName=admin&Password=admin123&AuthenButton=%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95&__EVENTVALIDATION=%2FwEWBALUudTOCwKvruq2CALSxeCRDwKGkaOOC8PpQ8Wk8rGROWhMJioW342WQkVO";

  byte[] b;

  b = System.Text.Encoding.UTF8.GetBytes(PostData);

  string header = "Content-Type: application/x-www-form-urlencoded ";

  WebBrowser.Navigate("http://****/login.aspx","",b,header);
发表评论