HttpClient读取数据乱码的解决方案
博主是一个近十年的老书虫了,从高中那会儿就开始看网络小说。每天半天看晚上看啊,终于眼睛也近视了,成绩也下降了(。。。。好像说远了)
最近在追辰东的《圣墟》,最近写到精彩部分了,一直等更新。但是也不能一直开着浏览器刷新啊。。。。
于是乎,就发挥了咱们程序员自给自足的精神,写一个程序去监听,然后等又更新的时候,自动打开浏览器,然后就可以愉快的看书了。。
-说干就干,打开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读取数据乱码的解决方案的更多相关文章
- Apache HttpClient 读取响应乱码问题总结
Apache HttpClient 读取响应乱码问题总结 setCharacterEncoding Content-Type HttpClient 起因 最近公司产品线研发人员调整,集中兵力做战 ...
- PHP 利用PHPExcel到处数据到Excel;还有导出数据乱码的解决方案。
直接贴代码吧 PHP版本5.6.38 mysql版本5.0 //连接数据库 $mysql_server_name = "*.*.*.*"; $mysql_username=&quo ...
- mysql CAPI 接口 读取中文乱码的解决方案(转)
最近的yymysqlsdk的开源项目里,对中文的支持不到位,因此用了1.5天的时间,对中文处理的各个情况进行了分析. 1.首先确认你的MySQL配置文件,my.ini (只针对window ...
- java nio buffer读取数据乱码问题
public static void main(String[] args) throws IOException { String charsetName = "GBK"; St ...
- PHP数据乱码
本文主要总结下PHP数据乱码的解决方案 要点:多个不同文件系统里一定要统一编码 [注意] (1)HTML编码与MySQL编码一致: (2)PHP编码与MySQL编码一致: (3)header头发送字符 ...
- PHP使用UTF8编码读取ACCESS的乱码问题解决方案(转)
PHP使用UTF8编码读取ACCESS的乱码问题解决方案 http://it.xwstudy.com/readnews.php?id=627 来源:本站编辑 发布日期:2013-05-27 已有 17 ...
- jsp读取后台数据乱码
jsp读取后台数据乱码,如图所示: tomcat编码格式与项目不一致,找到config/server.xml修改为UTF-8 <Connector URIEncoding="UTF-8 ...
- Redis 中文入库成功,读取数据写入文件乱码问题
近期须要用到redis ,可是在编码这个问题上,纠结了非常久. 需求 :每天一个进程将中文文件入库到redis中(不定时更新) ,另外几个进程读取redis中的信息 ,并处理数据结果.使 ...
- Android 从网络中获取数据时 产生部分数据乱码的解决
产生部分数据乱码的解决 标签: android部分中文乱码 2014-04-12 23:24 12366人阅读 评论(10) 收藏 举报 分类: [Android 基础](15) 版权声明:本文为博主 ...
随机推荐
- js_6_dom选择
什么是dom编程? 找 找到html中的标签,赋值给一个变量 改 通过更改这个变量动态地更改html中的内容 返回的内容为列表 如何找到那些标签? id:var find = document.get ...
- java8大基本数据类型
基本类型 字节数 位数 最大值 最小值 byte 1byte 8bit 2^7 - 1 -2^7 short 2byte 16bit 2^15 - 1 -2^15 int 4byte 32bit 2^ ...
- 【Java SE】如何用Java实现插入排序
摘要:前面三期分别写了三篇简单排序的算法,今天来讲一点稍微难一点的排序算法-----插入排序. 基本思想: 设n个数据已经按照顺序排列好(假定从小排到大). 输入一个数据x,将其放在恰当的位置,使其顺 ...
- 如何为form表单的button设置submit事件
若button按钮没有type属性,浏览器默认按照type=submit逻辑处理,这样若将没有type的button放在form表单中,点击按钮就会执行form表单提交
- DVWA安装问题(phpStudy)
安装过程出现的问题: 1.PHP function allow_url_include disabled 注意DVWA的版本 PHP version: 5.4.45 打开/phpStudy/ph ...
- display:inline-block下,元素不能在同一水平线及元素间无margin间距的问题解决方法
在前端页面编辑中,常常用于块元素横排列时,我们会用到浮动或者dispaly:inline-block: 浮动虽然好用,效果明显,但是会存在潜在BUG,(暂且不论):那么display:inline-b ...
- WPF之ViewModel
写之前我先唠叨两句,现在公司要求用wpf写个客户端,我之前玩过winform,没怎么用wpf写过正经项目,我接手这个wpf项目之后就开始研究这个东西,MVVM,自定义控件,等等.可能是winfrom先 ...
- 单元测试系列:Mock工具Jmockit使用介绍
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6760272.html Mock工具Jm ...
- python os模块实用函数
os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'pos ...
- get、post、put、delete请求方式
对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE. Jersey框架,实现了restful风格,常用的注解@GET.@POST.@PUT.@DELETE如 ...