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.
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)