更改IE用户代理

时间:2011-01-09 10:49:02

标签: c# internet-explorer watin user-agent

我正在使用WatiN自动化Internet Explorer,到目前为止它一直很棒。但是,我真的希望能够更改IE的用户代理,以便服务器认为它实际上是Firefox或其他浏览器。

Firefox useragent字符串类似于:

Mozilla / 5.0(Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13)Gecko / 20101203 Firefox / 3.6.13

使用以下代码

RegistryKey ieKey = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent");
            ieKey.SetValue("", "Mozilla/5.0");
            ieKey.SetValue("Compatible", "Windows");
            ieKey.SetValue("Version", "U");
            ieKey.SetValue("Platform", "Windows NT 5.1; en-US");
            ieKey.DeleteSubKeyTree("Post Platform");

我已经能够从

更改IE useragent字符串

Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 6.1; Trident / 4.0; AskTbMP3R7 / 5.9.1.14019)

Mozilla / 4.0(Windows; U; Windows NT 6.1; Trident / 4.0; en-US; rv:1.9.2.13)

现在,问题是:如何删除Trident / 4.0部分并在括号后添加“Gecko / 20101203 Firefox / 3.6.13”部分?

我真的很想用C#编程,不使用任何IE插件。

提前致谢。

2 个答案:

答案 0 :(得分:4)

除非WebBrowser控件在进程中运行,否则do this in C# without any IE Addons没有受支持的方式,在这种情况下,您可以使用UrlMkSetSessionOption() API。见The User-Agent String: Use and Abuse

如果您愿意使用add-ons,请参阅http://www.enhanceie.com/ietoys/uapick.asp

现在,有一个不受支持的黑客来执行此操作我不建议 - 也就是说,您可以将COMPATIBLE字符串替换为Firefox UA的其余部分,然后是CRLF和文字IGNORE:。这将导致HTTP标头“包装”到一个新标头中,因此您将发送看起来像这样的标头:

  

User-Agent:Mozilla / 5.0(Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13)Gecko / 20101203 Firefox / 3.6.13   IGNORE:MSIE 8.0; Windows NT 6.1;三叉戟/ 4.0; AskTbMP3R7 / 5.9.1.14019)

答案 1 :(得分:1)

我无法想象你为什么要这样做。 其他浏览器由于仍然坚持阻止任何其他内容的脑死网站而需要伪装成IE的情况并不少见,但我从未听说有人想要反过来这样做。至少在最近十年左右没有。

无论如何,正如您已经发现的那样,使用IE并不像使用其他浏览器那样容易。

如果你真的想这样做,我的建议是通过一个代理,让你为你发送一个欺骗性的用户代理。用任何语言编写都应该相对容易。您可以在浏览器所在的本地计算机上运行代理,并且它对浏览器用户和网站都是透明的(在本地计算机上,即使IP地址也是正确的,这可能是个问题用于远程代理)

对于它的价值,一些反病毒/反恶意软件应用程序实际上已经这样做了,有阻止用户代理和引用数据的选项,以防止网站跟踪它们。据我所知,他们几乎使用了这个技术(同样的本地代理也用于在恶意软件到达浏览器之前将其过滤掉)。