2012-08-07 51 views
43

¿Cuál es la forma correcta de configurar el encabezado User-Agent para una solicitud de WebClient para Windows Phone 7? Encontré 2 opciones, pero no estoy seguro de cuál es la correcta. Teniendo en cuenta un objeto cliente Web:Configuración del encabezado User-Agent para una solicitud de WebClient

WebClient client = new WebClient(); 

vi 2 opciones:

  1. establecer el User-Agent usando:

    client.Headers["User-Agent"] = "myUserAgentString"; 
    
  2. establecer el User-Agent mediante la WebHeaderCollection:

    WebHeaderCollection headers = new WebHeaderCollection(); 
    headers[HttpRequestHeader.UserAgent] = "userAgentString"; 
    client.Headers = headers; 
    

¿Puede aconsejar cuál de los 2 métodos anteriores es el correcto?

Respuesta

78

puede ir here (msdn) para mostrar una muestra "adecuada" para agregar un usuario-agente en su WebClient para C# y Here (msdn) para mostrar la muestra para Windows phone.

esto es esta muestra para C#:

WebClient client = new WebClient(); 

// Add a user agent header in case the 
// requested URI contains a query. 

client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

esto es una muestra para Windows Phone (Silverlight):

request.Headers["UserAgent"]= "appname"; 

o

request.UserAgent = "appname"; 
18

me encontré con que el cliente Web mantuvo quitando el encabezado User-Agent después de una solicitud y estaba cansado de configurarlo cada vez. Utilicé un truco para configurar el User-Agent permanentemente al crear mi propio WebClient personalizado y anulando el método GetWebRequest. Espero que esto ayude.

public class CustomWebClient : WebClient 
{ 
    public CustomWebClient(){} 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var request = base.GetWebRequest(address) as HttpWebRequest; 
     request.UserAgent="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0;)"; 

     //... your other custom code... 

     return request; 
    } 
} 
-2
const string ua = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; 
Request.Headers["User-Agent"] = ua; 
var httpWorkerRequestField = Request.GetType().GetField("_wr", BindingFlags.Instance | BindingFlags.NonPublic); 
if (httpWorkerRequestField != null) 
{ 
    var httpWorkerRequest = httpWorkerRequestField.GetValue(Request); 
    var knownRequestHeadersField = httpWorkerRequest.GetType().GetField("_knownRequestHeaders", BindingFlags.Instance | BindingFlags.NonPublic); 
    if (knownRequestHeadersField != null) 
    { 
     string[] knownRequestHeaders = (string[])knownRequestHeadersField.GetValue(httpWorkerRequest); 
        knownRequestHeaders[39] = ua; 
    } 
} 
+4

Código única no es una respuesta, ¿puedes explicar lo que hace y por qué debería ¿ser usado? –

1

Como complemento a las otras respuestas, aquí es la guía de Microsoft para user agent strings de sus navegadores. Las cadenas de agente de usuario difieren según el navegador (Internet Explorer y Edge) y el sistema operativo (Windows 7, 8, 10 y Windows Phone).

Por ejemplo, aquí es la cadena de agente de usuario para Internet Explorer 11 en Windows 10:

Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko 

y para Internet Explorer para Windows Phone 8.1 actualización:

Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537 

plantillas se proporcionan para las cadenas de agente de usuario para el explorador Edge para escritorio, dispositivo móvil y WebView. Consulte this answer para conocer algunos ejemplos de cadenas de agente de usuario perimetral.

Finalmente, another page on MSDN proporciona una guía para IE11 en sistemas operativos de escritorio más antiguos.

IE11 en Windows 8.1:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 

y IE11 en Windows 7:

Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko 
1

también puede utilizar lo siguiente:

client.Headers.Add(HttpRequestHeader.UserAgent, "My app."); 
Cuestiones relacionadas