1. 程式人生 > >HttpClient讀取數據亂碼的解決方案

HttpClient讀取數據亂碼的解決方案

bubuko markdown ttpClient logs user api get 爬蟲 .gz

博主是一個近十年的老書蟲了,從高中那會兒就開始看網絡小說。每天半天看晚上看啊,終於眼睛也近視了,成績也下降了(。。。。好像說遠了)

最近在追辰東的《聖墟》,最近寫到精彩部分了,一直等更新。但是也不能一直開著瀏覽器刷新啊。。。。

於是乎,就發揮了咱們程序員自給自足的精神,寫一個程序去監聽,然後等又更新的時候,自動打開瀏覽器,然後就可以愉快的看書了。。

-說幹就幹,打開VS2017,新建一個。。。。。。隨便啥項目,然後寫入

HttpClient httpClient = new HttpClient();
               
//解析主頁
var message = await httpClient.GetAsync(a);
               
var html = await message.Content.ReadAsStringAsync();

-然後習慣性的Debug看一下html的值。。。。我的天。。。。
技術分享圖片

這啥玩意兒???

-然後我以為是編碼問題,於是乎我又加上編碼

var contentType = message.Content.Headers.ContentType;
if (string.IsNullOrEmpty(contentType.CharSet))
{
        contentType.CharSet = "utf-8";
}

-然後結果還是一樣啊。。。。。我的天,難道這破網站有啥反爬蟲機制???
-於是我又分析瀏覽器的請求,把請求頭給加上

httpClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
httpClient.DefaultRequestHeaders.Referrer = new Uri("http://m.gxwztv.com/");
httpClient.DefaultRequestHeaders.Add("Cookie", "cids_AC=92542; cids_AC3=12743; cids_NU=12533; ras=41901%2C2121%2C12743%2C92542; cids_AC1=2121%2C41901; cv=5; fs=16; which=2");
httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1");
httpClient.DefaultRequestHeaders.Add("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6");
httpClient.DefaultRequestHeaders.Add("Connection", "keep-alive");
httpClient.DefaultRequestHeaders.Add("DNT", "1");
httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, sdch");

這下終於對了把???然後F5運行。。。我的天,還是不對。。。。

-然後我又瞎找了十來分鐘原因,最後瞟到上面那行代碼。。。。對!沒錯,就是那個Gzip。。。。我想會不會是要解壓啊。。。web程序員的我,平時這些都是瀏覽器幫我搞定了啊,我哪兒知道這些啊。
-於是又翻開萬能的MSDN。。。找httclient解壓Gzip的api。。。。

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

然後就這樣,然後再次F5.。。。。這下終於對了。。。。

技術分享圖片

繼續寫吧,爭取再23.30之前寫完這個小工具。。。。

HttpClient讀取數據亂碼的解決方案