http://blog.csdn.net/aasmfox/article/details/8700588

WebBrowser 其实是对 ActiveX 控件 SHDocVw 的封装,而这个SHDocVw的很多底层调用WebBrowser控件并没有提供实现,你这个应用需要直接操作 SHDoceVw 控件才可以。操作方法如下:

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[]);
}

完成上述3步后,你post 数据时, 就会响应 BeforeNavigate2 事件,

postDataText 中就是你post的数据。

 

1.在WebBrowser中获取Cookie

CookieContainer myCookieContainer = new CookieContainer();

string cookieStr = webBrowser1.Document.Cookie;
 string[] cookstr = cookieStr.Split(';');
 foreach (string str in cookstr)
 {
     string[] cookieNameValue = str.Split('=');
     Cookie ck = new Cookie(cookieNameValue[0].Trim ().ToString(), cookieNameValue[1].Trim ().ToString());
     ck.Domain = "www.google.com ";
     myCookieContainer.Add(ck);
 }

WebClient设置cookie!
 WebClient wc = new WebClient();
 wc.Headers.Add("Cookie", "PHPSESSID=" + cookie + ";");
 // 注意,这里是Cookie,不是Set-Cookie
 byte[] re = wc.UploadData(Global.RootPath + "test.php", new byte[0]);
 System.Text.UTF8Encoding converter = new System.Text.UTF8Encoding();
 string str = converter.GetString(re);


 2. 在WebBrowser中设置Cookie
 public partial class WebBrowserControl : Form
 {
         private String url;

        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
         public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

        public WebBrowserControl(String path)
         {
             this.url = path;
             InitializeComponent();

            // set cookie
             InternetSetCookie(url, "JSESSIONID", Globals.ThisDocument.sessionID);

            // navigate
             webBrowser.Navigate(url);
         }        
 }

3.将WebBrowser的cookie信息传给HttpWebRequest
(我试了,很管用) 
先建一个"CookieContainer" 把WebBrowser中的Cookie保存在里面 //在WebBrowser中登录cookie保存在WebBrowser.Document.Cookie中 CookieContainer myCookieContainer = new CookieContainer(); //String 的Cookie 要转成 Cookie型的 并放入CookieContainer中 string cookieStr = webBrowser1.Document.Cookie; string[] cookstr = cookieStr.Split(';'); foreach (string str in cookstr) { string[] cookieNameValue = str.Split('='); Cookie ck = new Cookie(cookieNameValue[0].Trim().ToString(), cookieNameValue[1].Trim().ToString()); ck.Domain = "www.abc.com";// 必须写对 myCookieContainer.Add(ck); } HttpWebRequest hreq = (HttpWebRequest)HttpWebRequest.Create("http://www.abc.com/search.asp "); hreq.Method = "POST"; hreq.ContentType = "application/x-www-form-urlencoded"; //自己创建的CookieContainer hreq.CookieContainer = myCookieContainer; string postdata = "id=2005&action=search&name="; byte[] byte1 = Encoding.ASCII.GetBytes(postdata); hreq.ContentLength = byte1.Length; Stream poststream = hreq.GetRequestStream(); poststream.Write(byte1, 0, byte1.Length); poststream.Close(); HttpWebResponse hres = (HttpWebResponse)hreq.GetResponse();