I'm trying to send an httpwebrequest using a tor proxy with my asp.net application and I receive this error message when calling the webresponse.GetResponse() method:
The server committed a protocol violation. Section=ResponseStatusLine
I've tried searching for a solution on the web and I found 3 main solutions for this error:
-
Add to Web.config.
<system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true"/> </settings> </system.net>`
-
Add the line:
webRequest.ProtocolVersion = HttpVersion.Version10;
to the code. - Add the line
request.ServicePoint.Expect100Continue = false;
to the code.
Each one of the listed solutions didn't change a thing about the error message.
Here's the request code:
WebRequest.DefaultWebProxy = new WebRequest("127.0.0.1:9051");
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.CookieContainer = new CookieContainer();
webRequest.ProtocolVersion = HttpVersion.Version10;
webRequest.KeepAlive = false;
webRequest.Method = "GET";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19";
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
StreamReader streamReader = new StreamReader(webResponse.GetResponseStream());
string html = streamReader.ReadToEnd();
webResponse.Close();
return html;
Can anyone help me find a solution for this?
Best Answer
You can get more details about the exception you are getting which is actually a WebException by looking at the
Response
property of the exception and then checking theStatusDescription
andStatusCode
properties. That will help you get more details about the error and hopefully point you in the right direction.Something like this:
Also, take a look at WebException.Status example on MSDN to get more details