HttpClient讀取數據亂碼的解決方案
阿新 • • 發佈:2018-01-03
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讀取數據亂碼的解決方案