.NETのHttpWebResponseのは、自動的にGZipedと収縮した応答を解凍していますか?
-
21-08-2019 - |
質問
私は圧縮された応答を受け入れ、要求を実行しようとしています。
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応答する :詳細については、こちらの記事をご覧ください。 P>
私はあなたがストリームを自分で解凍しなければならないと思います。ここでそれを行う方法についての記事があります:
所属していません StackOverflow