[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 不是按照標準走的,還是得自己想辦法啦!