9

asp.net アプリケーションで tor プロキシを使用して httpwebrequest を送信しようとしていますが、webresponse.GetResponse() メソッドを呼び出すと、次のエラー メッセージが表示されます。

サーバーがプロトコル違反を犯しました。Section=ResponseStatusLine

Web で解決策を検索してみましたが、このエラーの 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;

誰でもこれの解決策を見つけるのを手伝ってもらえますか?

4

2 に答える 2

3

実際には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);
        }
    }

また、詳細については、MSDN のWebException.Statusの例を参照してください。

于 2012-07-26T17:58:22.217 に答える