6
votes

Demande System.net.WebClient Gets 403 interdite mais les navigateurs n'ont pas de serveurs Apache

Un étrange, j'essaie de lire la section de nombreux sites Web différents, et un type de serveur particulier, Apache, donne parfois au code 403 interdit. Tous les serveurs Apache ne le font pas, il peut donc s'agir d'un paramètre de configuration ou d'une version particulière du serveur.

Lorsque je vérifie ensuite l'URL avec un navigateur Web (Firefox, par exemple) La page charge bien. Le code Sorta ressemble à ceci: xxx

normalement, un 403 est une autorisation d'accès échoue en quelque sorte, mais ce sont des pages normalement non sécurisées. Je pense que Apache filtre sur quelque chose dans les en-têtes de la requête depuis que je ne me préoccupe pas de le créer.

Peut-être que quelqu'un qui sait d'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


0 commentaires

4 Réponses :


10
votes

Essayez de régler l'en-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);


2 commentaires

C'était l'indice dont j'avais besoin. Merci!


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



1
votes

Cela pourrait être une question de l'en-tête UserAgent, comme indiqué "Tedugas", ou en fait tout ce que le navigateur est configuré silencieusement à faire. Par exemple, il pourrait s'agir d'une question de ne pas utiliser de serveur proxy que le navigateur utilise ou n'utilise pas les informations d'identification correctes pour le serveur proxy. Ce sont des choses qui peuvent déjà être configurées dans le navigateur, de sorte que vous n'êtes pas au courant, ils doivent être effectués.


0 commentaires

6
votes

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

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


0 commentaires

0
votes

J'ai eu le même problème et la réponse n'était pas évidente. J'ai trouvé la solution reniflant la communication réseau. Lorsque Apache donne sa page "Test 1 2 3 ...", il renvoie un code HTML avec un code interdit 403. Le navigateur ignore obtient le code et affiche la page, mais de WebClient renvoie un message d'erreur. La solution consiste à lire la réponse à l'intérieur de la capture d'une déclaration d'essai. Voici mon code: xxx

après la délégation de try, RETORNO contiendra la réponse HTML du serveur, quel que soit le code d'erreur du serveur renvoie.

Les en-têtes ont aucune influence sur ce nombre de personnes.


0 commentaires