web-dev-qa-db-fra.com

Définition de l'en-tête de l'agent utilisateur pour une demande WebClient

Quelle est la bonne manière de définir l'en-tête User-Agent pour une demande WebClient pour Windows Phone 7? J'ai trouvé 2 options, mais je ne sais pas laquelle est la bonne. Considérant un objet WebClient:

WebClient client = new WebClient();

J'ai vu 2 options:

  1. paramétrez l'agent utilisateur à l'aide de:

    client.Headers["User-Agent"] = "myUserAgentString";
    
  2. définissez l'agent utilisateur à l'aide de WebHeaderCollection:

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

Pouvez-vous s'il vous plaît indiquer laquelle des 2 méthodes ci-dessus est la bonne?

62
AndreiC

Vous pouvez consulter WebClient documentation pour un exemple en C # qui ajoute un agent utilisateur à votre WebClient et ici pour un exemple pour Windows Téléphone.

Voici l'échantillon pour 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;)");

Voici un exemple pour Windows Phone (Silverlight):

request.Headers["UserAgent"] = "appname";
// OR
request.UserAgent = "appname";
101
Doc Roms

J'ai constaté que le client Web continuait à supprimer mon en-tête User-Agent après une requête et que j'en avais marre de le définir à chaque fois. J'ai utilisé un hack pour définir l'agent utilisateur de manière permanente en créant mes propres méthodes personnalisées WebClient et en remplaçant la méthode GetWebRequest. J'espère que cela t'aides.

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;
    }
}
23
Ambrose Leung

Vous pouvez aussi utiliser ça:

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

En complément des autres réponses, voici les recommandations de Microsoft pour chaînes d'agent d'utilisateur pour ses navigateurs. Les chaînes de l'agent utilisateur diffèrent selon le navigateur (Internet Explorer et Edge) et le système d'exploitation (Windows 7, 8, 10 et Windows Phone).

Par exemple, voici la chaîne d’agent d’utilisateur pour Internet Explorer 11 sous Windows 10 :

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

et pour Internet Explorer pour la mise à jour de Windows Phone 8.1 :

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

Des modèles sont fournis pour les chaînes d'agent d'utilisateur pour le navigateur Edge pour Desktop, Mobile et WebView. Voir cette réponse pour des exemples de chaînes d'agent utilisateur Edge.

Enfin, ne autre page sur MSDN fournit des instructions pour IE11 sur des systèmes d'exploitation de bureau plus anciens.

IE11 sous Windows 8.1 :

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

et IE11 sous Windows 7 :

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

Cela a fonctionné pour moi:

var message = new HttpRequestMessage(method, url);
message.Headers.TryAddWithoutValidation("user-agent", "<user agent header value>");
var client = new HttpClient();
var response = await client.SendAsync(message);

Ici vous pouvez trouver la documentation pour TryAddWithoutValidation

1
Oscar Fraxedas