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之前写完这个小工具。。。。

原文地址:https://www.cnblogs.com/boxrice/p/8179741.html

时间: 2024-10-11 12:38:40

HttpClient读取数据乱码的解决方案的相关文章

PHP使用UTF8编码读取ACCESS的乱码问题解决方案(转)

PHP使用UTF8编码读取ACCESS的乱码问题解决方案 http://it.xwstudy.com/readnews.php?id=627 来源:本站编辑 发布日期:2013-05-27 已有 1790 人浏览过此信息 PHP搭配ACCESS是一个非常冷的话题,但是却有很多实用性,特别是从ASP转过来的程序员,对ACCESS有特殊的理解.学文培训在实际PHP培训中也会讲到ACCESS配合PHP的系统开发.那我们今天就来分享一下PHP+ACCESS的在实战开发中通常会遇到的UTF-8编码问题的解

Redis 中文入库成功,读取数据写入文件乱码问题

最近需要用到redis ,但是在编码这个问题上,纠结了很久. 需求 : 每天一个进程将中文文件入库到redis中(不定时更新) ,另外几个进程读取redis中的信息 ,并处理数据结果. 使用的redis模块 : redis-py 问题 : 入库正常,读取数据成功,以GBK编码写入文件出现异常. 通过以下参数连接 redis : client  = redis.StrictRedis(host='localhost', port=6379, db=0, password="***") 从

jsp读取后台数据乱码

jsp读取后台数据乱码,如图所示: tomcat编码格式与项目不一致,找到config/server.xml修改为UTF-8 <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 原文地址:https://www.cnblogs.

笨鸟先飞之Java--MySql中文数据乱码为哪般???

从开始敲drp到现在的hibernate,中文数据乱码无时无刻不"陪伴"在我的身边: 图一:在drp的分销商模块,每次修改区域虽然返回修改成功,但是每次读取到的中文数据都是"???"的字符串,但数字和字母的数据却不受影响. 图二:不管是drp还是hibernate项目,通过执行sql或者hql语句插入中文数据的,都会呈现图中的景象,甚是无语...... 但被它困扰了这么久,我也算"久病成医",今天就一起来给Java项目医治一下中文数据乱码的这个大

中文乱码问题解决方案

UTF-8编码与GBK,GB2312编码区别 UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM.是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码.UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强.UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示.如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包. GBK是国家

JSP项目中文乱码完全解决方案

先来说说几种常见的解决方案: (1)在response返回数据包之前设置它的encoding值 方法:response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("UTF-8"); (2)使用String类来解决 方法:String chinese = "我只说中国话!"; byte[] str = chinese.getBytes("

python文件写入后读出空字符、读出乱码的解决方案

第一步 排除文件打开方式错误: r只读,r+读写不创建,w新建写,w+新建写创建,a附加,b二进制文件 以w,w+的方式打开文件,会将文件内容清零 (以w方式打开,不能读出.w+可读写) 以r,r+的方式打开文件,不会清零 (r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建) 以a,a+的方式打开文件,附加打开 (a:附加写方式打开:a+: 附加读写方式打开) 以 'U' 标志打开文件, 所有的行分割符通过 Python 的输入方法(例#如 read*() ),返回时都会

Java中文乱码&amp;特殊字符解决方案

Java中文乱码&特殊字符解决方案 相信很多朋友遇到过Java的乱码问题,最近我也在解决一个"使用文本生成图片过程中中文以及特殊字符乱码"的问题:花了我大量时间,Debug了sun.font.sun.awt下面的各种源码,终于搞懂了其机制,解决了目前次问题:现在把问题解决过程给写下来,做个记录,以免以后再次遇到. 遇到的问题 下面是我想要执行的代码(经过极度简化,但是意思没变): 1 public static void main(String[] args) throws I

Java—从文件中读取数据

1.FileInputStream() // 构建字节输入流对象,参数为文件名 FileInputStream fin = new FileInputStream("message"); System.out.println("输入流可读入字节数:" + fin.available()); // 建立byte型数组b,从输入流读取的数据暂时存放在b中 byte b[] = new byte[fin.available()]; // 从输入流读取数据 fin.read