使用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,此方法仍然有效吗
谢谢!
我们经常使用"UrlMkSetSessionOption"函数。我们有一个"自定义web浏览器外壳",它实际上只是一个嵌入到全屏WinForms程序中的IE用户控件。我们更改用户代理以向我们的web服务器标识这是我们的"自定义"浏览器外壳。但要回答您的具体问题:
- 我们已经在XP上的IE8和Win7上的IE9中使用了这个。我认为它是独立于版本的,但我们总是使用最新的版本
- 据我们所知,更改此设置只会影响调用该方法的进程中运行的IE。因此,如果用户从桌面启动IE,则用户代理不会改变。如果重新启动程序,则用户代理将保持不变
- 无论是否运行独立的IE实例,它都能正常工作。这些独立实例的用户代理保持不变