日期:2014-05-17  浏览次数:21052 次

webbrowser获取post数据的问题
场景:
用webbrowser浏览一个网页,网页向网站提交(POST)了一些信息,我想在其提交到网站前对这些POST数据在浏览器侧进行截获

在网上找了帖子,地址如下:
http://hi.baidu.com/gookings/blog/item/12acbd4435056796b2b7dcd3.html
参照这个例子,新建一个Form1,在Form1中加了一个webbrowser1并按照要求完成了下面3步

1、在 windows/system32 目录下找到 shdocvw.dll 这个动态库,将其添加到引用中
2、在 Form1_Load 中添加如下语句
SHDocVw.WebBrowser wb = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance; 
wb.BeforeNavigate2 +=   new DWebBrowserEvents2_BeforeNavigate2EventHandler(WebBrowser_BeforeNavigate2);

3、添加如下成员函数
private void WebBrowser_BeforeNavigate2(object pDisp, ref object URL, ref object Flags, 
ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel) 

    string postDataText = System.Text.Encoding.ASCII.GetString(PostData as byte[]); 
}


在运行时候,发现 SHDocVw.WebBrowser wb = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;  这句执行后,wb是null,然后后面的语句报错,是我那里操作不对?

------解决方案--------------------
操作webbrowser   跟操作网页在后台上面讲 区别不是很大

你试一试  重写
------解决方案--------------------
本帖最后由 caozhy 于 2011-04-30 20:17:28 编辑
.NET内置了WebBrowser控件。不需要引用shdocvw.dll。

lz在工具箱里面找找。
------解决方案--------------------
SHDocVw.WebBrowser wb = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
wb.BeforeNavigate2 += new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(WebBrowser_BeforeNavigate2);


        private void WebBrowser_BeforeNavigate2(object pDisp, ref object URL, ref object Flags,ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
        {
            string postDataText = System.Text.Encoding.ASCII.GetString(PostData as byte[]);
            richTextBox1.Text += postDataText;
            richTextBox1.Text += "OK";
        }


我是这样做的,wb不为空,但是WebBrowser_BeforeNavigate2也没有触发。
为知为什么,楼下高手解答。