web-dev-qa-db-fra.com

Le serveur a commis une violation de protocole. Section = ResponseHeader Detail = CR doit être suivi de LF, In WinForms?

J'essaie d'utiliser un WebClient/HttpWebRequest pour télécharger des données à partir d'un serveur. J'utilise le code suivant pour cela:

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("admin", "password");
Stream datastream = client.OpenRead("http://routerlogin.com/cgi-bin/CF_logs.html");
StreamReader reader = new StreamReader(datastream);

Le serveur est ma page est dans la configuration de mon routeur. Cela fonctionne très bien à partir d'un navigateur, mais lorsqu'il est téléchargé à l'aide de mon code, il jette un WebException avec le message

Le serveur a commis une violation de protocole. Section = ResponseHeader Detail = CR doit être suivi de LF, In WinForms ?.

J'ai trouvé une solution que l'on utiliserait s'ils utilisaient ASP.net, en ajoutant ce qui suit à web.config:

<configuration> 
    <system.net> 
        <settings> 
            <httpWebRequest useUnsafeHeaderParsing="true" /> 
        </settings> 
    </system.net> 
</configuration>

Cependant, je crée une application WinForms donc cela ne fonctionnera pas pour moi. Quelles sont les alternatives pour résoudre ce problème?

40
msbg

Tout d'abord, l'ajout d'un fichier app.config est aussi simple que l'ajout de tout autre fichier, Comment: ajouter un fichier de configuration d'application à un projet C #

Ensuite, il vous suffit d'ajouter cet extrait de code ci-dessus à ce nouveau app.config.

Une autre façon de définir cette propriété via du code, en évitant le besoin d'un app.config est indiquée ici ou ici .

24
shriek