WebBrowser 控件獲取POST數據


 

 

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();

---------------------

本文來自 aasmfox 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/aasmfox/article/details/8700588?utm_source=copy 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM