2009-03-13 7 views
7

Ich benutze den Code unten, um eine unserer 3rd Party entwickelten Seiten zu ziehen, so dass ich es als XML für meine zufälligen Stückchen Arbeit analysieren kann.Faking Browser-Anfrage in ASP.net C#

irritierend haben wir noch eine Browser-Erkennungsstufe auf dem Server, die nur bestimmte Browser auf der Website erlaubt; so die Frage ist, wie würde ich es fälschen, so dass der Server denkt, eine Browser-Anfrage?

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; 
    } 

Antwort

15

Browser Erkennung erfolgt auf der Grundlage eines Headers in der Anfrage an den Server. Alles, was Sie tun müssen, ist diesen Header zu setzen. Mit HttpWebRequest wird dies jedoch nicht über die Header-Auflistung, sondern über die .UserAgent-Eigenschaft festgelegt.

... 
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(); 
... 
+0

Cracking hatte aber Ihren objRequest.UserAgent mit ((System.Net.HttpWebRequest) objRequest) .UserAgent zu ersetzen, wie es über die andere Art und Weise fiel .. Nahmen diese winzigen Bit Code von http://www.primaryobjects.com/CMS/Article64.aspx –

+0

Sie haben Recht, ich habe die Tatsache, dass ObjRequest ist eine WebRequest, nicht ein HttpWebRequest verpasst. Ich habe die Probe für die Zukunft modifiziert. –

+1

Ausgezeichnet, täuschen die Traffic Scotland Website schön! – Jason

1

denke ich, die meisten (wenn nicht alle) Browser-Erkennung basiert auf dem User-Agent-Header, der HttpRequest.UserAgent Eigenschaft festgelegt. Ich sehe, es gibt eine Website für User-Agent-Strings verschiedener Browser: http://www.user-agents.org/

+0

Dank, die wirklich sehr praktisch Links: o) –

0

wie bei Waldens oben hatte aber

objRequest.UserAgent = 
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"; 

mit

((System.Net.HttpWebRequest)objRequest).UserAgent = "Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)"; 

sonst über sie fiel zu ersetzen. (Ich habe den Browser in googlebot geändert, um unseren Cookie-Server zu umgehen.)

3

Sie können das ClientTarget-Attribut in der Seite verwenden. Z.B.

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

Stellen Sie die Konfiguration, wie Sie wollen ...

Z.B.

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

Dann können Sie es wie folgt verwenden.

<asp:Page ClientTarget="downlevel" /> 

Dies wird die Anfrage fälschen!

+0

Extrem alte Frage; aber danke fürs spielen und eine interessante antwort hinzufügen: D –

+0

DANKE !!! Habe gerade 4 Stunden damit verbracht, eine Lösung zu finden, um IE11-Kompatibilität zu reparieren. –

+0

Dies ist etwas, das ich nicht kannte, ich habe dieses Problem, weil CuteWeb.AjaxUploader aufhören würde, das Javascript für unbekannte Benutzeragenten zu reproduzieren, die in meinem Fall IE11 ist. Ich werde es versuchen. –