2012-07-26 138 views
8

を使用したとき、私は私のasp.netアプリケーションとTORプロキシを使用してのHttpWebRequestを送信しようとしているとwebresponse.GetResponse()メソッドを呼び出すとき、私は、このエラーメッセージが表示されます。サーバーがプロトコル違反をコミットしました。 = ResponseStatusLineセクションTORプロキシ

The server committed a protocol violation. Section=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; 

は誰でも、私は、このためのソリューションを見つけるのを助けることができますか?

答えて

3

あなたは例外のResponseプロパティを見て、その後StatusDescriptionStatusCodeプロパティをチェックすることで、実際にWebExceptionであるあなたが取得している例外の詳細を取得することができます。それはエラーの詳細を取得し、うまくいけば正しい方向に向けるのに役立ちます。

このような何か:

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

また、私は同じ問題を抱えていたより詳細

+3

これらの行を追加しようとしましたが、ステータスはプロトコルエラーではなくServerProtocolViolationです。 –

+3

実際、レスポンスは私の例外ではnullです:( –

+0

ここにも同じ問題があります。レスポンスはnullです。 – tnktnk

0

を取得するために、MSDNにWebException.Statusの例を見てみましょう。 httpwebrequest getresponseメソッドは常にエラープロトコルのvialotionを返し、私はこのようにして解決しました。

まず、xdocumentまたはxmldocumentの代わりにxml comオブジェクトを使用します。

この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 
} 
関連する問題