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:
paramétrez l'agent utilisateur à l'aide de:
client.Headers["User-Agent"] = "myUserAgentString";
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?
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";
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;
}
}
Vous pouvez aussi utiliser ça:
client.Headers.Add(HttpRequestHeader.UserAgent, "My app.");
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
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