.NETのHttpWebResponseのは、自動的にGZipedと収縮した応答を解凍していますか?

StackOverflow https://stackoverflow.com/questions/678547

質問

私は圧縮された応答を受け入れ、要求を実行しようとしています。

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

私は、私は2番目の行を追加したとき、私は手動で解凍を処理する必要がありますかしらます。

役に立ちましたか?

解決

私は答えを見つけます。

あなたがにコードを変更することができます:

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

そして、あなたは自動解凍を持つことになります。残りのコードを変更する必要はありませんん。

他のヒント

.NETコアのものはもう少し関与しています。 GZipStreamは、以下のAutomaticCompressionの例を考えてみましょうため(書き込みのように)プロパティが存在しないようGETが必要とされます:

var req = WebRequest.CreateHttp(uri);

/*
 * Headers
 */
req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";

/*
 * Execute
 */
try
{
    using (var resp = await req.GetResponseAsync())
    {
        using (var str = resp.GetResponseStream())
        using (var gsr = new GZipStream(str, CompressionMode.Decompress))
        using (var sr = new StreamReader(gsr))

        {
            string s = await sr.ReadToEndAsync();  
        }
    }
}
catch (WebException ex)
{
    using (HttpWebResponse response = (HttpWebResponse)ex.Response)
    {
        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            string respStr = sr.ReadToEnd();
            int statusCode = (int)response.StatusCode;

            string errorMsh = $"Request ({url}) failed ({statusCode}) on, with error: {respStr}";
        }
    }
}

GZIPおよびDeflateの応答は自動的に処理されていません。 のHttpWebRequestとgzipのHttp応答する

私はあなたがストリームを自分で解凍しなければならないと思います。ここでそれを行う方法についての記事があります:

  

http://www.west-wind.com/WebLog/posts /102969.aspxする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top