兩種 HttpClient class 分別是
- System.Net.Http.HttpClient
- 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 不是按照標準走的,還是得自己想辦法啦!