2010-02-23 3 views
4

Un curieux, j'essaie de lire la section <Head> de beaucoup de différents sites web, et un type particulier de serveur, Apache, donne parfois le code 403 interdit. Ce ne sont pas tous les serveurs Apache qui le font, donc il peut s'agir d'un paramètre de configuration ou d'une version particulière du serveur.La requête System.Net.WebClient obtient 403 Interdit, mais les navigateurs ne le font pas avec les serveurs Apache

Lorsque je vérifie l'URL avec un navigateur Web (Firefox, par exemple), la page se charge correctement. Le code ressemble sorta comme ceci:

var client = new WebClient(); 
var stream = client.OpenRead(new Uri("http://en.wikipedia.org/wiki/Barack_Obama")); 

Normalement, un 403 est une autorisation d'accès a échoué genre de chose, mais ce sont normalement des pages non sécurisées. Je pense qu'Apache est en train de filtrer quelque chose dans les en-têtes des requêtes puisque je ne prends pas la peine d'en créer.

Peut-être que quelqu'un qui en sait plus sur Apache peut me donner quelques idées de ce qui manque dans les en-têtes. Je voudrais garder les en-têtes aussi petits que possible pour minimiser la bande passante.

Merci

Répondre

9

Définissez la tête UserAgent:

string _UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"; 
client.Headers.Add(HttpRequestHeader.UserAgent, _UserAgent); 
+0

C'était le soupçon que je avais besoin. Merci! –

+0

403 peut également être causée par des problèmes TLS. Pour vérifier, vous devez vérifier le texte de l'objet WebException.Response. Ou, essayez d'ajouter ceci à votre code: 'ServicePointManager.SecurityProtocol = (SecurityProtocolType) 3072;' Cela forcera TLS 1.2 –

1

Il pourrait être une question de l'en-tête UserAgent, comme « thedugas » dit, ou quoi que ce soit fait, le navigateur est configuré pour faire en silence. Par exemple, il peut s'agir de ne pas utiliser un serveur proxy que le navigateur utilise ou de ne pas utiliser les informations d'identification correctes pour le serveur proxy. Ce sont des choses qui peuvent déjà être configurées dans le navigateur, donc vous n'êtes pas conscient qu'ils doivent être faits.

2

J'ai eu un problème similaire et en dessous du réglage résolu le problème

Client.Headers["Accept"] = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"; 
Client.Headers["User-Agent"] ="Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC)"; 
Questions connexes