-->

Change IE user agent

2019-07-19 08:09发布

问题:

I'm using WatiN to automate Internet Explorer, and so far it's been great. However, I would really like to be able to change the user agent of IE so the server thinks it's actually Firefox or some other browser.

A Firefox useragent string look something like:

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

With the following code

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");

I have been able to change the IE useragent string from

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

to

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

Now, the question: how do I delete the Trident/4.0 part and add the "Gecko/20101203 Firefox/3.6.13" part after the parentheses?

I would really like to do this programatically in C#, without using any IE add-ons.

Thanks in advance.

回答1:

There's no supported way to do this in C# without any IE Addons unless the WebBrowser control is running in-proc, in which case you can use the UrlMkSetSessionOption() API. See The User-Agent String: Use and Abuse

If you are willing to use add-ons, see http://www.enhanceie.com/ietoys/uapick.asp

Now, there's an unsupported hack to do this that I wouldn't recommend-- namely, you could replace the COMPATIBLE string with the remainder of the Firefox UA, followed by a CRLF and the text IGNORE:. This would cause the HTTP header to "wrap" into a new header, so you'd be sending Headers that look something like:

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; Trident/4.0; AskTbMP3R7/5.9.1.14019)



回答2:

I can't imagine why you'd want to do this. It's not uncommon for other browsers to need to pretend to be IE due to brain-dead sites that still insist on blocking anything else, but I've never heard of anyone wanting to do it the other way round. At least not in the last ten years or so.

Anyway, as you've already found, it's not as easy to do with IE as it is with other browsers.

If you really want to do this, my suggestion would be to go through a proxy, and have that send the spoofed user agent for you. That ought to be relatively easy to write in any language. You can run the proxy on the local machine where the browser is, and it'll all be transparent to both the browser user and the web site (being on the local machine, even the IP address will be correct, which can be a problem for remote proxies)

For what it's worth, some anti-virus/anti-malware apps actually do this already, having options to block the user agent and referral data to prevent sites from tracking them. As far as I know, they use pretty much exactly this tecnique (those same local proxies are also used to filter out the malware before it gets to the browser).