Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改IE用户代理_C#_Internet Explorer_Watin_User Agent - Fatal编程技术网

C# 更改IE用户代理

C# 更改IE用户代理,c#,internet-explorer,watin,user-agent,C#,Internet Explorer,Watin,User Agent,我正在使用WatiN使Internet Explorer自动化,到目前为止,它非常棒。不过,我真的希望能够更改IE的用户代理,使服务器认为它实际上是Firefox或其他浏览器 Firefox用户代理字符串类似于: 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.CreateSub

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

Firefox用户代理字符串类似于:

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插件


提前感谢。

除非WebBrowser控件在proc中运行,否则在没有任何IE插件的情况下,在C#中不支持
执行此操作,在这种情况下,您可以使用
UrlMkSetSessionOption()
API。看

如果您愿意使用
附加组件
,请参阅

现在,有一个我不推荐的不受支持的hack可以做到这一点——即,您可以用
Firefox UA
的剩余部分替换
兼容的
字符串,然后是
CRLF
和文本
忽略:
。这将导致HTTP头“包装”到新头中,因此您将发送类似以下内容的头:

用户代理:Mozilla/5.0(Windows;U;Windows NT 6.1;en-US;rv:1.9.2.13)Gecko/20101203 Firefox/3.6.13 忽略:MSIE8.0;WindowsNT6.1;三叉戟/4.0;AskTbMP3R7/5.9.1.14019)


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

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

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


值得一提的是,一些反病毒/反恶意软件应用实际上已经做到了这一点,它们可以选择阻止用户代理和推荐数据,以防止网站跟踪它们。据我所知,他们几乎完全使用了这项技术(同样的本地代理也用于在恶意软件进入浏览器之前过滤掉它)。

谢谢你的回答,我已经做了一些事情,使useragent看起来像以下内容:Mozilla/5.0(兼容;MSIE 8.0;X11;U;Linux i686;en-US;rv:1.9.1a2pre)(Gecko/2008073000碎纸机/3.0a2pre ThunderBrowse/3.2.1.8;Trident/4.0)。你可以清楚地看到Gecko前面的括号,它通常不会出现,但希望这足以满足我的需要。我也会尝试你建议的方法。谢谢!也谢谢你的回答。我这样做的原因是我有时会管理我玩的在线游戏的几个帐户-游戏会检查IP、用户代理和cookies以检查是由同一玩家管理的帐户。我真的不想被检测到,所以我想我可以在我的应用程序中更改useragent。我们遇到了这样的情况:一个客户站点没有更新他们页面的桌面版本,但移动版本很好。他们暂时不打算更新桌面,所以我们不得不这样做强制浏览器进入假移动模式以显示更好的网站版本。请查看第二个答案的注释:D