.NET의 httpwebrespons가 압축되지 않은 응답을 자동으로 gzip 및 디플링 된 응답입니까?

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

문제

압축 응답을 수락하는 요청을하려고합니다.

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

두 번째 줄을 추가 할 때 감압을 수동으로 처리 해야하는지 궁금합니다.

도움이 되었습니까?

해결책

나는 대답을 찾았다.

코드를 다음으로 변경할 수 있습니다.

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

그리고 당신은 자동 감압이 있습니다. 나머지 코드를 변경할 필요가 없습니다.

다른 팁

.NET Core의 경우 약간 더 관련이 있습니다. ㅏ 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