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: 184.108.40.206) Gecko / 20101203 Firefox / 3.6.13
Con el siguiente código
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/220.127.116.1119)
Mozilla/4.0 (Windows; U; Windows NT 6.1; Trident/4.0; en-US; rv:18.104.22.168)
Ahora, la pregunta: 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.
Gracias de antemano.
preguntado el 09 de enero de 11 a las 10:01
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. Ver The User-Agent String: Use and Abuse
Si está dispuesto a usar
add-ons, Consulte http://www.enhanceie.com/ietoys/uapick.asp
Now, there's an sin soporte hack to do this that I wouldn't recommend-- namely, you could replace the
COMPATIBLE string with the remainder of the
Firefox UA, Seguido de un
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:22.214.171.124) Gecko/20101203 Firefox/3.6.13 IGNORE: MSIE 8.0; Windows NT 6.1; Trident/4.0; AskTbMP3R7/126.96.36.19919)
I can't imagine why you'd want to do this. It's not uncommon for otros 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).