[WinRT] 两种 HttpClient class 与 HTTP compression

两种 HttpClient class 分别是

  1. System.Net.Http.HttpClient
  2. Windows.Web.Http.HttpClient

与 HTTP compression 使用上的方式


什么是 HTTP  compression ?
请参考 : Wiki

简单来说就是在 request 可以用 http header 指定这次 Accept-Encoding 是不是支持压缩
响应端的的也会在 response 中的 header 响应说这次的 Content-Encoding 是什么压缩方式
当然 request 端不一定一定要送 Accept-Encoding 的 header Server 才会回,尤其在接 http api 的时候,这时候就看 api 的实做噜
至于常见的是压缩方式 gzip , deflate 的两种压缩方式,wiki 有说规范里面可以出现的值有哪一些,所以详尽的 tag 使用方式就自行去寻找,不是本篇重点

所以当我们使用 httpclient 调用回传内容是有送 Conetent-Encoding 的时候有办法不做任何事就开开心心的收到解好的内容吗?

答案当然是有的!!(洒花)

但两种版本的 HttpClient 多少有点不同的使用方式

下面列出几种我知道的

1. 使用 System.Net.Http.HttpClient 或者 Microsoft HTTP Client Libraries NuGet Package
可以参考 : 这篇


var handler = new HttpClientHandler();
if (handler.SupportsAutomaticDecompression)
{
    handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
}
var httpClient = new HttpClient(handler);

2. 使用 Windows.Web.Http.HttpClient (WinRT),与上面的相差不多,但稍微简单一点点


var filter = new HttpBaseProtocolFilter
{
    AutomaticDecompression = true,
};
var httpClient = new HttpClient(filter);

然后以上面的方式产生好了之后就可以无痛的正常的读取压缩过的 content 而不用自己还要写解压缩的程序啦!
当然这边是指 HTTP 的标准,如果你收的 response 不是按照标准走的,还是得自己想办法啦!