2009-03-13 9 views
7

J'utilise le code ci-dessous pour tirer l'une de nos pages développées par des tiers afin que je puisse l'analyser en XML pour mes morceaux de travail aléatoires. De manière irritante, nous avons un niveau de détection du navigateur sur le serveur qui n'autorise que certains navigateurs sur le site; donc la question est de savoir comment je feindreais que le serveur pense que c'est une demande de navigateur?Demande de navigateur Faking dans ASP.net C#

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

Répondre

15

La détection du navigateur est basée sur un en-tête dans la requête au serveur. Tout ce que vous devez faire est de définir cet en-tête. Toutefois, avec HttpWebRequest vous ne définissez pas cela à travers la collection d'en-têtes mais plutôt avec la propriété .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 mais a dû remplacer votre objRequest.UserAgent avec ((System.Net.HttpWebRequest) objRequest) .UserAgent Comme il est tombé sur l'autre façon .. A pris ce petit peu de code de http://www.primaryobjects.com/CMS/Article64.aspx –

+0

Vous avez raison, j'ai raté le fait que objRequest est une demande de Web, pas un HttpWebRequest. J'ai modifié l'échantillon pour le futur. –

+1

Excellent, dupé le site Traffic Scotland gentiment! – Jason

1

Je pense que la plupart (sinon tous) la détection du navigateur est basé sur l'en-tête User-Agent, défini par la propriété de HttpRequest.UserAgent. Je vois qu'il y a un site Web pour les chaînes d'agent utilisateur de divers navigateurs: http://www.user-agents.org/

+0

Merci que les liens vraiment très pratique: o) –

0

comme avec Waldens ci-dessus, mais a dû remplacer

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

avec

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

Sinon, il est tombé sur. (J'ai changé le navigateur pour googlebot pour échapper à notre serveur de cookie)

3

Vous pouvez utiliser l'attribut ClientTarget dans la page. Par exemple.

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

Définissez la configuration que vous souhaitez ...

Par ex

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

Ensuite, vous pouvez l'utiliser comme suit.

<asp:Page ClientTarget="downlevel" /> 

Ceci simulera la demande!

+0

Extrêmement vieille question; mais merci de jouer et d'ajouter une réponse intéressante: D –

+0

MERCI !!! Je viens de passer 4 heures à essayer de trouver une solution pour corriger la compatibilité IE11. –

+0

C'est quelque chose que je ne savais pas, j'ai ce problème parce que CuteWeb.AjaxUploader arrêterait de rendre le javascript pour les agents utilisateurs inconnus qui dans mon cas est IE11. Je vais essayer ça. –

Questions connexes