Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF, In WinForms?

I am trying to use a WebClient / HttpWebRequest to download some data from a server. I use the following code to do so:

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

The server is my page is in my router's configuration. It works fine from a browser, but when downloaded using my code it throws a WebException with the message

The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF, In WinForms?.

I have found a solution one would use if they were using ASP.net, adding the following to web.config:

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

However, I am making a WinForms app so this won't work for me. What alternatives are there to fix this problem?

like image 763
msbg Avatar asked May 26 '13 12:05

msbg


2 Answers

First, adding an app.config file is just as easy as adding any other file, How to: Add an Application Configuration File to a C# Project

Then you just have to add that code snippet above to that new app.config.

Another way of setting that property via code, avoiding the need for an app.config is shown here or here.

like image 145
shriek Avatar answered Sep 20 '22 14:09

shriek


Your problem might not require any app.config changes (and in my case, this configuration change made no difference). I would try modifying your Accept: header, as suggested in this link.

In my case, I create an HttpWebRequest directly, so my solution was to add the following:

request.Accept = "text/html, application/xhtml+xml, */*" 
like image 37
Todd Myhre Avatar answered Sep 18 '22 14:09

Todd Myhre