我正在使用下面的代码来提取我们的第三方开发页面之一,因此我可以将其解析为XML,用于随机工作。
我们在服务器上设置了浏览器检测级别,只允许某些浏览器访问该站点;所以问题是如何伪造它以便服务器认为它是浏览器请求?
static string GetHtmlPage(string strURL)
{
String strResult;
System.Net.WebResponse objResponse;
System.Net.WebRequest objRequest = System.Net.HttpWebRequest.Create(strURL);
objResponse = objRequest.GetResponse();
using (System.IO.StreamReader sr = new System.IO.StreamReader(objResponse.GetResponseStream()))
{
strResult = sr.ReadToEnd();
sr.Close();
}
return strResult;
}
答案 0 :(得分:15)
浏览器检测是根据对服务器的请求中的标头完成的。您需要做的就是设置标题。但是,使用HttpWebRequest时,不要通过headers集合设置它,而是使用.UserAgent属性。
...
System.Net.WebRequest objRequest =
System.Net.HttpWebRequest.Create(strURL);
//Pretend to be IE7
((System.Net.HttpWebRequest)objRequest).UserAgent =
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
objResponse = objRequest.GetResponse();
...
答案 1 :(得分:3)
您可以在页面中使用ClientTarget属性。 E.g。
http://msdn.microsoft.com/en-us/library/system.web.ui.page.clienttarget.aspx
http://msdn.microsoft.com/en-sg/library/6379d90d(v=vs.85).aspx
根据需要设置配置......
E.g。
<configuration>
<system.web>
<clientTarget>
<add alias="ie5" userAgent="Mozilla/4.0 (compatible;MSIE 5.5;Windows NT 4.0)"/>
<add alias="ie4" userAgent="Mozilla/4.0 (compatible;MSIE 4.0;Windows NT 4.0)"/>
<add alias="uplevel" userAgent="Mozilla/4.0 (compatible;MSIE 4.0;Windows NT 4.0)"/>
<add alias="downlevel" userAgent="Unknown"/>
</clientTarget>
</system.web>
</configuration>
然后您可以按如下方式使用它。
<asp:Page ClientTarget="downlevel" />
这会伪造请求!
答案 2 :(得分:1)
我认为大多数(如果不是全部)浏览器检测都是基于HttpRequest.UserAgent属性设置的User-Agent标头。我看到有一个网站用于各种浏览器的用户代理字符串:http://www.user-agents.org/
答案 3 :(得分:0)
objRequest.UserAgent =
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)";
<强>与强>
((System.Net.HttpWebRequest)objRequest).UserAgent = "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)";
否则它会倒下。 (我将浏览器更改为googlebot以逃避我们的cookie服务器)