使用urlmon.dll更改用户代理

本文关键字:用户代理 dll urlmon 使用 | 更新日期: 2023-09-27 18:28:27

在寻找更改webBrowser控件的用户代理字符串的方法时,我发现了这个漂亮的方法:

    [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 static void ChangeUserAgent(string Agent)
    {
        UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, Agent, Agent.Length, 0);
    }

基本上,我需要一种方法来更改用户代理,直到我想再次更改它。

通常:

webBrowser1.Navigate ("http://www.whatsmyuseragent.com", "_self" , null, "User-Agent: Luke's Web Browser");

仅适用于一个请求。

然而,我一直在到处读到第一种方法每节课只起一次作用。在我的情况下,它可以随心所欲地工作。所以我猜测这与计算机上的Internet Explorer实例有关?

所以我的问题是:

  • 最终用户需要在其计算机上安装什么版本才能使此方法按预期工作?我想怎么改就怎么改
  • 由于这与计算机上安装的Internet Explorer有关,更改应用程序中的用户代理会影响浏览器吗
  • 如果用户打开了Internet Explorer,此方法仍然有效吗

谢谢!

使用urlmon.dll更改用户代理

我们经常使用"UrlMkSetSessionOption"函数。我们有一个"自定义web浏览器外壳",它实际上只是一个嵌入到全屏WinForms程序中的IE用户控件。我们更改用户代理以向我们的web服务器标识这是我们的"自定义"浏览器外壳。但要回答您的具体问题:

  1. 我们已经在XP上的IE8和Win7上的IE9中使用了这个。我认为它是独立于版本的,但我们总是使用最新的版本
  2. 据我们所知,更改此设置只会影响调用该方法的进程中运行的IE。因此,如果用户从桌面启动IE,则用户代理不会改变。如果重新启动程序,则用户代理将保持不变
  3. 无论是否运行独立的IE实例,它都能正常工作。这些独立实例的用户代理保持不变