2009-03-13 50 views
7

estoy usando el código de abajo para tirar de una de nuestra tercera parte en las páginas para que pueda analizar como XML para mis bits aleatorios de trabajo desarrollado.petición del navegador Falsificación en ASP.net C#

muy irritante que stil tener un nivel de detección del navegador establecido en el servidor que sólo permite que ciertos navegadores en el sitio; así que la pregunta es ¿cómo podría falsificarlo para que el servidor piense que es una solicitud del navegador?

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

Respuesta

15

La detección del navegador se realiza en función de un encabezado en la solicitud al servidor. Todo lo que necesita hacer es establecer ese encabezado. Sin embargo, con HttpWebRequest no establece eso a través de la colección de encabezados, sino más bien con la propiedad .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 pero tuvo que reemplazar su objRequest.UserAgent con ((System.NET.HttpWebRequest) objRequest) .UserAgent Al caer sobre la otra manera .. tomó esta pequeña poco de código de http://www.primaryobjects.com/CMS/Article64.aspx –

+0

Tiene razón, me perdí el hecho de que es un objRequest WebRequest, no un HttpWebRequest. Modifiqué la muestra para el futuro. –

+1

¡Excelente, engañó al sitio web de Traffic Scotland muy bien! – Jason

1

Creo que la mayoría (si no todos) la detección del navegador se basa en la cabecera User-Agent, establecido por la propiedad HttpRequest.UserAgent. Veo que hay un sitio web para las cadenas de usuario-agente de varios navegadores: http://www.user-agents.org/

+0

Gracias que une realmente muy práctico: o) –

0

como con Waldens anteriores, pero tuvo que sustituir

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)"; 

De lo contrario, cayó al suelo. (Cambié el navegador a googlebot para evadir nuestro servidor de cookies)

3

Puede utilizar el atributo ClientTarget en la página. P.ej.

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

Establecer la configuración como desee ...

P. ej

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

Luego puede usarlo de la siguiente manera.

<asp:Page ClientTarget="downlevel" /> 

¡Esto fingirá la solicitud!

+0

Pregunta extremadamente vieja; pero gracias por jugar y agregar una respuesta interesante: D –

+0

¡GRACIAS! Acabo de pasar 4 horas tratando de encontrar una solución para arreglar la compatibilidad con IE11. –

+0

Esto es algo que no sabía, tengo este problema porque CuteWeb.AjaxUploader dejaría de representar el javascript para los agentes de usuario desconocidos, que en mi caso es IE11. Voy a intentar esto. –

Cuestiones relacionadas