【问题标题】:Faking browser request in ASP.net C#在 ASP.net C# 中伪造浏览器请求
【发布时间】:2010-10-13 04:09:54
【问题描述】:

我正在使用下面的代码来提取我们的第 3 方开发页面之一,以便我可以将其解析为 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;
    }

【问题讨论】:

    标签: asp.net http-headers c#-2.0


    【解决方案1】:

    我认为大多数(如果不是全部)浏览器检测都是基于由 HttpRequest.UserAgent 属性设置的 User-Agent 标头。我看到有一个用于各种浏览器的用户代理字符串的网站:http://www.user-agents.org/

    【讨论】:

    • 感谢链接真的很方便 :o)
    【解决方案2】:

    浏览器检测是基于对服务器的请求中的标头进行的。您需要做的就是设置该标题。但是,使用 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();
    ...
    

    【讨论】:

    • 破解,但不得不用 ((System.Net.HttpWebRequest)objRequest).UserAgent 替换你的 objRequest.UserAgent 因为它倒在了另一种方式.. 从primaryobjects.com/CMS/Article64.aspx 中获取了一小段代码/跨度>
    • 你是对的,我错过了 objRequest 是 WebRequest,而不是 HttpWebRequest 的事实。我已经为将来修改了示例。
    • 太棒了,很好地欺骗了交通苏格兰网站!
    【解决方案3】:

    与上面的 Waldens 一样,但必须替换

    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 服务器)

    【讨论】:

      【解决方案4】:

      您可以在页面中使用 ClientTarget 属性。例如

      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

      根据需要设置配置...

      例如

      <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" />
      

      这会伪造请求!

      【讨论】:

      • 非常老的问题;但感谢您播放并添加有趣的答案:D
      • 谢谢!!!刚刚花了 4 个小时试图找到修复 IE11 兼容性的解决方案。
      • 这是我不知道的事情,我遇到了这个问题,因为 CuteWeb.AjaxUploader 将停止为未知用户代理呈现 javascript,在我的例子中是 IE11。我会试试这个。
      猜你喜欢
      • 2012-04-17
      • 1970-01-01
      • 2013-02-28
      • 2017-08-28
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2014-06-21
      相关资源
      最近更新 更多