50

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

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

2 行目を追加すると、解凍を手動で処理する必要があるのではないかと思います。

4

4 に答える 4

117

私は答えを見つけました。

コードを次のように変更できます。

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

そして、自動解凍があります。残りのコードを変更する必要はありません。

于 2009-03-24T18:35:55.877 に答える
4

.NET Core の場合は、もう少し複雑です。次の例GZipStreamAutomaticCompression 考えてみましょう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}";
        }
    }
}
于 2017-06-12T21:07:10.403 に答える
-1

GZIP および Deflate 応答は自動的に処理されません。詳細については、この記事を参照してください: HttpWebRequest および GZip Http 応答

于 2009-03-24T18:11:22.677 に答える
-2

自分でストリームを解凍する必要があると思います。これを行う方法に関する記事は次のとおりです。

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

于 2009-03-24T18:10:37.157 に答える