服务器犯了违反协议。 部=使用TOR代理时ResponseStatusLine(The serv

2019-09-20 06:52发布

我想用TOR代理我的asp.net应用程序发送HttpWebRequest和调用webresponse.GetResponse()方法时,我收到此错误信息:

服务器犯了违反协议。 第= ResponseStatusLine

我试图寻找在网络上的解决方案,我发现这个错误3级主要的解决方案:

  1. 添加到Web.config中。

     <system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true"/> </settings> </system.net>` 
  2. 添加行: webRequest.ProtocolVersion = HttpVersion.Version10; 该代码。

  3. 添加行request.ServicePoint.Expect100Continue = false; 该代码。

所列出的解决方案中的每一个并没有改变有关错误消息的事情。

这里的请求代码:

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;

谁能帮我找到了一个解决方案?

Answer 1:

你可以得到你所得到的例外,这实际上是一个更细节引发WebException通过查看Response异常的属性,然后检查StatusDescriptionStatusCode属性。 这将有助于你得到更多的错误信息,希望你指出正确的方向。

事情是这样的:

    catch(WebException e) 
    {
        if(e.Status == WebExceptionStatus.ProtocolError)
        {
            Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
            Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
        }
    }

另外,看看WebException.Status MSDN上的例子,以获得更多的细节



Answer 2:

我有同样的问题。 HttpWebRequest的GetResponse的方法总是返回错误协议vialotion和我解决probled这种方式;

首先我使用XML COM对象,而不是的XDocument或XmlDocument的。

此COM对象的有几个版本的Microsft XML,V3.0,V5.0,V6.0。 我用V6.0。

MSXML2.DOMDocument60Class doc = new MSXML2.DOMDocument60Class();
doc.setProperty("ServerHTTPRequest",true);
doc.setProperty("ProhibitDTD", false); 
doc.async = false;
doc.load(extURL);  

if (doc.parseError.errorCode != 0)
{
 // error  
}
else
{
 // do stuff
}


文章来源: The server committed a protocol violation. Section=ResponseStatusLine when using a tor proxy