public string GetKaiJ(string type = "ssq")
{
/*1.通过WebBrowser控件&HttpWebRequest获得网站信息*/
switch (type)
{
case "ssq":
req = (HttpWebRequest)HttpWebRequest.Create(url_ssq);
break;
case "dlt":
req = (HttpWebRequest)HttpWebRequest.Create(url_dlt);
break;
default:
req = (HttpWebRequest)HttpWebRequest.Create(url_ssq);
break;
} req.ContentType = "text/html";
req.Method = "GET";
req.Timeout = 1000;
/*2.数据处理*/
HttpWebResponse response = (HttpWebResponse)req.GetResponse(); /**在这里对接收到的页面内容进行处理
* 说明:HttpWebResponse.ContentEncoding会返回两种情况:ContentEncoding="";ContentEncoding="gzip";
* gzip的情况需要解压,就是第一种情况;注意gzip要小写;
* 如果不注意这两种情况,网站返回的数据有时候会间隔以这两种情况返回;造成有时候编码正常,有时乱码
* 对于这两种情况要进行分别的数据解析
*/
if (response.ContentEncoding == "gzip") {
//using (Stream resStream = response.GetResponseStream())
using (var resStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress))
{
//using (StreamReader reader = new StreamReader(resStream,myEncoding))
using (var reader = new StreamReader(resStream, System.Text.Encoding.Default))
{
responseContent = reader.ReadToEnd().ToString(); // Read and display lines from the file until the end of
// the file is reached.
//string line;
//while ((line = reader.ReadLine()) != null)
//{
// Console.WriteLine(line);
//}
}
}
} else if (response.ContentEncoding == "") {
using (var resStream = response.GetResponseStream())
//using (Stream resStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress))
{
//using (StreamReader reader = new StreamReader(resStream,myEncoding))
using (StreamReader reader = new StreamReader(resStream, myEncoding_default))
{
responseContent = reader.ReadToEnd().ToString(); // Read and display lines from the file until the end of
// the file is reached.
//string line;
//while ((line = reader.ReadLine()) != null)
//{
// Console.WriteLine(line);
//}
}
}
} else { }
return $"{responseContent}\nresponseContentEncoding:{response.ContentEncoding}";
}

HttpWebResponse获取DOM数据注意之ContentEncoding的更多相关文章

  1. Vue获取dom和数据监听

    Vue获取dom对象 在js和jq中我们都能获取dom对象例如 // 获取id=1的div标签 <div id=d1>dom对象</div> // js语法 let ele = ...

  2. 从后台获取的数据渲染到页面中的dom操作

    很多情况下页面dom都是从后台拼接字符串添加生成的新的dom元素,在编辑器中不能看到,只能通过检查看到页面的dom结构,但是这时候会发生一个问题,就是如果使用jQuery无法进行dom操作,事件和方法 ...

  3. vue的数据双向绑定和ref获取dom节点

    vue是一个MVVM的框架 业务逻辑代码即js部分是model部分, html是view部分. 当model改变的时候,view也会改变 view 改变是,model也会改变 <template ...

  4. React 点击删除列表中对应项(React 获取DOM中自定义属性)

    点击删除按钮,删除列表中对应项本来是React比较基础的应用,可是应用情况变得复杂了以后,我还真想了一会儿才搞定. 简化一下应用场景:点击新增按钮,增加一条输入框,点击输入框旁边的按钮,删除该输入框( ...

  5. javascript跨域获取json数据

    项目在开发过程中,用到了天气预报的功能,所以需要调用天气预报的api,一开始以为直接用ajax调用url就可以获取天气数据,结果涉及到了跨域的问题,这里做一个记录. 说到跨域,就得知道同源策略. 同源 ...

  6. Ajax异步获取html数据中包含js方法无效的解决方法

    页面上使用js写了一个获取后台数据的方法 function data() { var tab = $("#dic") $.ajax({ url: '../demo.ashx?met ...

  7. Vue自定义指令获取DOM元素

    我们知道,Vue.js的核心是数据驱动,当数据有所变化时,DOM就会被更新,比如: <span v-text="msg"></span> export de ...

  8. vue(4)—— vue的过滤器,监听属性,生命周期函数,获取DOM元素

    过滤器 vue允许自定义过滤器,我个人认为,过滤器有两种,一种是对数据的清洗过滤,一种是对数据切换的动画过滤 数据切换的动画过滤 这里还是利用前面的动态组件的例子: 这里由于没办法展示动画效果,代码如 ...

  9. Vue系列之 => ref获取DOM元素和组件

    可以获取DOM元素,和组件中的数据,方法 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  10. Vue 双向数据绑定、事件介绍以及ref获取dom节点

    vue是一个MVVM的框架 M model V view MVVM  model改变会影响视图view,view改变会影响model 双向数据绑定必须在表单里面使用 //我发现在谷歌浏览器翻译后的网页 ...

随机推荐

  1. BUUCTF-MISC-LSB(stegsolve的一种妙用)

    题目已知是LSB隐写 丢入stegsolve,点 > ,可以看见Red plane 0,Green plane 0,Blue plane 0上边好像有东西 点analyse->data e ...

  2. 自用gulp打包脚本,压缩html,压缩js,压缩css,压缩图片,功能齐全

    const gulp = require('gulp'); const fs = require('fs'); const htmlmin = require('gulp-htmlmin'); con ...

  3. loopback4:单元测试冻结时间

    解决方案 import {expect} from '@loopback/testlab'; import sinon from 'sinon'; describe('example test', ( ...

  4. 王道oj/problem12(动态申请内存存储数组)

    网址:http://oj.lgwenda.com/problem/12 思路:用输入的整型创建对应数组,用scanf消除换行键: 用gets()输入语句并输出,再释放. 代码: #define _CR ...

  5. c++中unique_ptr 的使用和理解

    unique_ptr 的使用 std::unique_ptr是c++11起引入的智能指针,为什么必须要在c++11起才有该特性,主要还是c++11增加了move语义,否则无法对对象的所有权进行传递. ...

  6. redis数据持久化之RDB和AOF

    前言 redis虽然是内存缓存程序,但是可以将内存中的数据保存到硬盘上,从而实现数据保存.目前有两种redis数据持久化方式,分别是RDB和AOF. RDB模式 RDB之简介 RDB(redis da ...

  7. [golang]使用gopsutil获取系统信息

    前言 在python中有个psutil库用于获取系统信息,而go语言也有一个类似的库--gopsutil,功能差不多. 项目地址:https://github.com/shirou/gopsutil ...

  8. 11、Mybatis之逆向工程

    11.1.正向与逆向工程概述 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表:例如Hibernate是支持正向工程的. 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成Ja ...

  9. 如何在linux上安装neovim0.9(以debian和ubuntu为例) – 东凭渭水流

    发布于 1 分钟前  3 次阅读 由于apt中只有neovim-0.72的安装包.想使用新版需要自己安装,以下是安装过程 1.首先需要卸载旧版neovim sudo remove neovim 2.从 ...

  10. 一文了解Gin对Cookie的支持

    1. 引言 本文将从Web应用程序处理请求时需要用户信息,同时HTTP又是无状态协议这个矛盾点出发.从该问题出发,简单描述了解决该问题的Token 机制,进而引出Cookie的实现方案. 基于此我们将 ...