更改WebBrowser控件的用户代理
生活随笔
收集整理的這篇文章主要介紹了
更改WebBrowser控件的用户代理
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我試圖在Winforms應用程序中更改WebBrowser控件的UserAgent。 我已成功使用以下代碼實現(xiàn)此目的:? [DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);const int URLMON_OPTION_USERAGENT = 0x10000001;public void ChangeUserAgent()
{List<string> userAgent = new List<string>();string ua = "Googlebot/2.1 (+http://www.google.com/bot.html)";UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0);
}
唯一的問題是這只能工作一次。當我嘗試第二次運行ChangeUserAgent()方法時,它不起作用。它保持設置為第一個更改的值。這很煩人,我已經(jīng)嘗試了一切,但它不會改變不止一次。 有誰知道一種不同的,更靈活的方法? 謝謝 ???? 2018-12-28?5 條評論 分享
4 個回復
為陡土
我不確定是否應該從網(wǎng)站上復制/粘貼,但我寧愿在這里留下答案,而不是鏈接。如果有人可以在評論中澄清,我將非常感激。 基本上,您必須擴展WebBrowser類。? public class ExtendedWebBrowser : WebBrowser {bool renavigating = false;public string UserAgent { get; set; }public ExtendedWebBrowser(){DocumentCompleted += SetupBrowser;//this will cause SetupBrowser to run (we need a document object)Navigate("about:blank");}void SetupBrowser(object sender, WebBrowserDocumentCompletedEventArgs e){DocumentCompleted -= SetupBrowser;SHDocVw.WebBrowser xBrowser = (SHDocVw.WebBrowser)ActiveXInstance;xBrowser.BeforeNavigate2 += BeforeNavigate;DocumentCompleted += PageLoaded;}void PageLoaded(object sender, WebBrowserDocumentCompletedEventArgs e){}void BeforeNavigate(object pDisp, ref object url, ref object flags, ref object targetFrameName,ref object postData, ref object headers, ref bool cancel){if (!string.IsNullOrEmpty(UserAgent)){if (!renavigating){headers += string.Format("User-Agent: {0}rn", UserAgent);renavigating = true;cancel = true;Navigate((string)url, (string)targetFrameName, (byte[])postData, (string)headers);}else{renavigating = false;}}} } 注意:要使用上述方法,您需要向“Microsoft Internet Controls”添加COM引用。 他也提到了你的方法,并聲明WebBrowser控件似乎緩存了這個用戶代理字符串,因此它不會在不重新啟動進程的情況下更改用戶代理。 ???? 2018-12-28?0?0佬棠
最簡單的方法:? webBrowser.Navigate("http://localhost/run.php", null, null,"User-Agent: Here Put The User Agent"); 2018-12-28?0?0才脊烽饋低
此外,該功能還有一個刷新選項(根據(jù)MSDN)。它適用于我(你應該在任何用戶代理更改之前設置它)。然后問題代碼可以像這樣改變:? [DllImport("urlmon.dll", CharSet = CharSet.Ansi)] private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer, int dwBufferLength, int dwReserved);const int URLMON_OPTION_USERAGENT = 0x10000001; const int URLMON_OPTION_USERAGENT_REFRESH = 0x10000002;public void ChangeUserAgent() {string ua = "Googlebot/2.1 (+http://www.google.com/bot.html)";UrlMkSetSessionOption(URLMON_OPTION_USERAGENT_REFRESH, null, 0, 0);UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, ua, ua.Length, 0); } 2018-12-28?0?0嘔躥尉
我想補充@Jean Azzopardi的答案。? void BeforeNavigate(object pDisp, ref object url, ref object flags, ref object targetFrameName,ref object postData, ref object headers, ref bool cancel) {// This alone is sufficient, because headers is a "Ref" parameters, and the browser seems to pick this back up.headers += string.Format("User-Agent: {0}rn", UserAgent); } 這個解決方案最適合我。使用renavigating給我?guī)砹似渌婀值膯栴},比如瀏覽器內容突然消失,有時仍然得到不支持的瀏覽器。使用這種技術,Fiddler中的所有請求都具有正確的用戶代理。總結
以上是生活随笔為你收集整理的更改WebBrowser控件的用户代理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 木瓜炖牛奶的功效与作用吃法(木瓜炖牛奶的
- 下一篇: 汽车导航地图下载安装(汽车导航地图下载)