2009-03-13 3 views
7

Sto usando il codice qui sotto per estrarre una delle pagine sviluppate da terze parti in modo da poterla analizzare come XML per i miei frammenti casuali.Faq richiesta browser in ASP.net C#

Irritevolmente abbiamo un livello di rilevamento del browser impostato sul server che consente solo determinati browser sul sito; quindi la domanda è: come faccio a fingere in modo che il server pensi che sia una richiesta del browser?

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

risposta

15

Il rilevamento del browser viene eseguito in base a un'intestazione nella richiesta al server. Tutto quello che devi fare è impostare quell'intestazione. Tuttavia, con HttpWebRequest non lo si imposta tramite la raccolta di intestazioni, ma piuttosto con la proprietà .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(); 
... 
+0

Cracking ma ha dovuto sostituire l'objRequest.UserAgent con ((System.Net.HttpWebRequest) objRequest) .UserAgent Come è caduto sopra l'altro modo .. ha preso questa piccola bit di codice da http://www.primaryobjects.com/CMS/Article64.aspx –

+0

Sei corretto, ho perso il fatto che objRequest è una richiesta Web, non una HttpWebRequest. Ho modificato il campione per il futuro. –

+1

Eccellente, hai ingannato il sito Web di Traffic Scotland! – Jason

1

penso che la maggior parte (se non tutti) il rilevamento del browser si basa sulla intestazione User-Agent, impostato dalla proprietà HttpRequest.UserAgent. Vedo che esiste un sito Web per le stringhe user-agent di vari browser: http://www.user-agents.org/

+0

Grazie contenente il link davvero a portata di mano: o) –

0

as Waldens sopra ma dovuto sostituire

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

con

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

Altrimenti cade sopra. (Ho cambiato il browser in googlebot per eludere il nostro server dei cookie)

3

È possibile utilizzare l'attributo ClientTarget nella pagina. Per esempio.

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

impostare la configurazione come si desidera ...

Ad es

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

Quindi è possibile utilizzarlo come segue.

<asp:Page ClientTarget="downlevel" /> 

Questo falsificherà la richiesta!

+0

Questione estremamente vecchia; ma grazie per aver giocato e aggiunto una risposta interessante: D –

+0

GRAZIE !!! Ho appena trascorso 4 ore a cercare una soluzione per risolvere la compatibilità IE11. –

+0

Questo è qualcosa che non sapevo, sto avendo questo problema perché CuteWeb.AjaxUploader smetterebbe di rendere il javascript per i programmi utente sconosciuti che nel mio caso è IE11. Ci proverò. –