日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

更改WebBrowser控件的用户代理

發(fā)布時間:2024/9/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 更改WebBrowser控件的用户代理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我試圖在Winforms應用程序中更改WebBrowser控件的UserAgent。 我已成功使用以下代碼實現此目的:? [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()方法時,它不起作用。它保持設置為第一個更改的值。這很煩人,我已經嘗試了一切,但它不會改變不止一次。 有誰知道一種不同的,更靈活的方法? 謝謝 ???? 2018-12-28?5 條評論 分享

為陡土

我不確定是否應該從網站上復制/粘貼,但我寧愿在這里留下答案,而不是鏈接。如果有人可以在評論中澄清,我將非常感激。 基本上,您必須擴展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

才脊烽饋低

此外,該功能還有一個刷新選項(根據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控件的用户代理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。