准备工作:

通过 NUGET 安装 Microsoft.Bcl.Compression ;

使用命名空间

using System.IO.Compression ;

        public static async Task<string> Get(string url)
{
WebRequest request = WebRequest.CreateHttp(new Uri(url)); //创建WebRequest对象
request.Method = "GET"; //设置请求方式为GET
request.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0";
request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate"; //设置接收的编码 可以接受 gzip var response = await request.GetResponseAsync();
Stream stream = null;
stream = response.Headers[HttpRequestHeader.ContentEncoding].Equals("gzip",
StringComparison.CurrentCultureIgnoreCase) ? new GZipStream(response.GetResponseStream(), CompressionMode.Decompress) : response.GetResponseStream();
var ms = new MemoryStream();
var buffer = new byte[];
while (true)
{
if (stream == null) continue;
var sz = stream.Read(buffer, , );
if (sz == ) break;
ms.Write(buffer, , sz);
}
var bytes = ms.ToArray();
var html = GetEncoding(bytes, response.Headers[HttpRequestHeader.ContentType]).GetString(bytes);
await stream.FlushAsync();
return html; }

获取编码:

public static Encoding GetEncoding(byte[] bytes, string charSet)
{
var html = Encoding.UTF8.GetString(bytes);
var regCharset = new Regex(@"charset\b\s*=\s*""*(?<charset>[^""]*)");
if (regCharset.IsMatch(html))
{
return Encoding.GetEncoding(regCharset.Match(html).Groups["charset"].Value);
}
if (string.IsNullOrEmpty(charSet))
{
return Encoding.UTF8;
}
try
{
// 解决 gbk gb2312
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
return Encoding.GetEncoding(charSet);
}
catch (Exception)
{
return Encoding.UTF8;
}
}

虽然使用 HttpClient 更简单

            var http = new HttpClient();
http.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0");
http.DefaultRequestHeaders.Add("accept-encoding", "gzip, deflate");
var response = await http.GetAsync(new Uri(url));
response.EnsureSuccessStatusCode();//确保请求成功

但是它的响应头并没有 “Content-Encoding” ,所以无法直接判断需不需要 Gzip 解压。

UWP 解压 GZIP的更多相关文章

  1. curl解压gzip页面gzcompress内容

    $headers = array( //"Content-type:application/json;charset='utf-8'", "Cache-Control:n ...

  2. 解压gzip格式文件(包括网页)

    先上源码 参数说名: - source :gzip格式流内容. - len: gzip流长度 - dest: 解压后字符流指针 - gzip: 压缩标志,非0时解压gzip格式,否则按照zip解压 说 ...

  3. HttpWebResponse 解压gzip、deflate压缩

    需要使用到两个Stream的子类:GZipStream.DeflateStream,代码如下: public string GetResponseBody(HttpWebResponse respon ...

  4. C# 解压gzip文件(.tgz)

    1.引用 SharpCompress.dll 2.代码 using System;using System.IO;using System.Text;using SharpCompress.Reade ...

  5. httplib 和 httplib2区别之 gzip解压

    HTTP请求头Accept-encoding: gzip信息告诉服务器,如果它有任何新数据要发送给时,请以压缩的格式发送.如果服务器支持压缩,它将返回由 gzip 压缩的数据并且使用Content-e ...

  6. 压缩及解压命令gzip、bzip2、tar

    1. gzip 描述:压缩与解压缩 用法:gzip[选项]...[文件名称]... 选项:-d 解压 gzip hello.txt     # 文件压缩后名为hello.txt.gz gzip -d ...

  7. *.tar 用 tar –xvf 解压 *.gz 用 gzip -d或者gunzip 解压 *.tar.gz和*.tgz 用 tar –xzf 解压 *.bz2 用 bzip2 -d或者用bunzip2 解压 、*.tar.bz2用tar –xjf 解压

    解压: 1.*.tar 用 tar –xvf 解压, --skip-old-files跳过已经存在的文件,压缩用tar -cvf 2.*.bz2 用 bzip2 -d或者用bunzip2 解压 3.* ...

  8. GZip 压缩解压 工具类 [ GZipUtil ]

    片段 1 片段 2 pom.xml <dependency> <groupId>commons-codec</groupId> <artifactId> ...

  9. [Linux] 解压tar.gz文件,解压部分文件

    遇到数据库无法查找问题原因,只能找日志,查找日志的时候发现老的日志都被压缩了,只能尝试解压了   数据量比较大,只能在生产解压了,再进行查找 文件名为*.tar.gz,自己博客以前记录过解压方法: h ...

随机推荐

  1. SQL学习笔记:选取第N条记录

    Northwind数据库,选取价格第二高的产品. 有两种方法,一个是用Row_Number()函数: SELECT productname FROM ( productname, Row_Number ...

  2. Nunit在VS2010加载不了程序集的解决办法

    本机环境: Win7 64位 旗舰版 VS2010 Nunit2.6.3 故障重现步骤: 1.在启动外部应用程序中增加C:\Program Files (x86)\NUnit 2.6.3\bin\nu ...

  3. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q73-Q76)

    Question 73You create a Web Part that calls a function named longCall.You discover that longCall tak ...

  4. Lucene总体架构

    Lucene总的来说是:• 一个高效的,可扩展的,全文检索库.• 全部用Java实现,无须配置.• 仅支持纯文本文件的索引(Indexing)和搜索(Search).• 不负责由其他格式的文件抽取纯文 ...

  5. 使用VideoView自定义一个播放器控件

    介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actv ...

  6. UITabBarController 微信

    AppDelegate.m #import "AppDelegate.h" #import "FirstViewController.h" #import &q ...

  7. 函数return/获取元素样式/封装自己的库

    一:函数return <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&qu ...

  8. 大家一起和snailren学java-(六)复用类

    “失恋了,唉,还没开始就结束了……唉……继续看java” 今天又是周末,我们来看看java的复用机制是什么情况.大家知道,代码复用非常实用,这项特性是java的一个重要的部分.那java用什么来实现的 ...

  9. .bat脚本基本命令语法

    目录批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)     1.REM 和 ::     2.ECHO 和 @     3.PAUSE     4.ERRORLEVEL     5.TITL ...

  10. linux编译安装MySQL

    最近就想搞搞hadoop,然后装个MySQL,测试一下那个sqoop. MySQL这种东西,既然是开放源码的,那就源码安装吧. 下面是我的测试环境说明: VMware10+Ubuntu14.04 Ky ...