none
c# webbrowser 修改user-agent 造成打开新窗口referer引用丢失问题 RRS feed

  • 问题

  • 之前从网上找到的代码,想修改webbrowser的user-agent

    代码如下

     [DllImport("urlmon.dll", CharSet = CharSet.Ansi)]
            private static extern int UrlMkSetSessionOption(int dwOption, string pBuffer,
                int dwBufferLength, int dwReserved);
            private const int UrlmonOptionUseragent = 0x10000001;
            public void ChangeUserAgent(string agent)
            {
                UrlMkSetSessionOption(UrlmonOptionUseragent, agent, agent.Length, 0);
            }

    但是通过该方法user-agent是修改成功了.

    但是在用SHDocVw.WebBrowser 做新窗口 newwindows2 或者newwindwows3 打开的时候新窗口的时候,会造成referer的丢失,

    不知道该怎么解决,但是我若是去掉修改uesr-agent的情况下,打开新窗口通过数据抓取发现加载新窗口的时候,referer引用是存在的,

    一旦修改user-agent,referer就会丢失,没有了来源页面的信息,对于"urlmod.dll" 这个也不太了解,

    请问如何在修改user-agent的情况下,保持原有的浏览器其他信息不改变?

    2015年4月28日 2:21

答案

  • 你好:

    请问你使用的是Windows Form中的WebBrowser控件吗?你是如何通过SHDocVw.WebBrowser打开新窗口的呢?“referer”引用丢失是什么意思呢?最好把代码贴出来看一下。

    另外如果使用的是WebBrowser控件的话可以尝试重写WebBrowser控件,在BeforeNavigate2的事件中修改UserAget属性,参考代码:

    public class CustomWebBrowser : WebBrowser
        {
            public string UserAgent { get; set; }
    
            public CustomWebBrowser()
            {
                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;
            }
    
            void BeforeNavigate(object pDisp, ref object url, ref object flags, ref object targetFrameName,
                ref object postData, ref object headers, ref bool cancel)
            {
                headers += string.Format("User-Agent: {0}\r\n", UserAgent);
            }
        }


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年4月29日 4:46
    版主