获取一个网页数据返回的编码类型是gzip,我该怎么解压缩,高分求助。

sektor 2010-07-02 03:30:26
如题。
在C#区找到一相同问题,无奈对C#太不了解。没有能力把它转成vb.
如下:

http://topic.csdn.net/t/20051224/17/4479341.html


或者:


// 准备请求

HttpWebRequest request = (HttpWebRequest)
WebRequest.Create( "http://gamesir.enorth.com.cn/bbsindex.html ");
request.ProtocolVersion = new Version(1, 1);
request.Accept = "*/* ";
request.Headers.Add( "Accept-Encoding: gzip, deflate ");
request.KeepAlive = true;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) ";

// 读取回应

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Console.WriteLine( "{0} ", response.StatusDescription);
foreach(string key in response.Headers.AllKeys)
{
Console.WriteLine( "{0}: {1} ", key, response.Headers[key]);
}

// 将回应全部读入一个 MemoryStream:

MemoryStream ms = new MemoryStream();
try
{
Stream res = response.GetResponseStream();
byte[] buffer = new byte[8192];
while (true)
{
int read = res.Read(buffer, 0, 8192);
if (read == 0)
{
// 如果服务器用的是 gzip 的话,只能靠读不出更多数据来判断是否已经读完
Console.WriteLine( "Response is terminated due to zero byte reception. ");
break;
}
else
{
ms.Write(buffer, 0, read);
}
}
}
catch (Exception e)
{
// 抛出异常也可能表示已经读完
Console.WriteLine( "Response is terminated due to exception " + e.Message);
}
finally
{
response.Close();
}
Console.WriteLine( "Response has {0} bytes. ", ms.Length);

// ms 倒回开头:

ms.Seek(0, SeekOrigin.Begin);

// 用 GZipInputStream 包裹:

GZipInputStream gzip = new GZipInputStream(ms);

// 用 GZipInputStream 读取 ms 的内容并写入 ms2:

MemoryStream ms2 = new MemoryStream();
try
{
byte[] buffer = new byte[1]; // 一点一点读——因为这个服务器的gzip没有Footer,读到结尾的时候会出错,所以为了把最后一个字节都读出来,只能一点一点读

while (true)
{
int read = gzip.Read(buffer, 0, 1);
if (read == 0) break;
ms2.Write(buffer, 0, read);
}
}
catch (Exception e)
{
Console.WriteLine( "Exception! " + e.ToString());
}
Console.WriteLine( "Unzipped. ");

// 将 ms2(解压后的内容)保存到文件

fs = File.Create( "response.txt ");
ms2.Seek(0, SeekOrigin.Begin);
ms2.WriteTo(fs);
fs.Close();
Console.WriteLine( "Written to response.txt. ");
Console.ReadLine();
...全文
356 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
daddi 2010-12-06
  • 打赏
  • 举报
回复
这里有个问题啊,万一下载的网页本身没有gzip压缩,就是正常显示,用这个函数就不能得到正确的结果,那么应该怎样判断该网页是否已经压缩呢?
weilu0328 2010-07-02
  • 打赏
  • 举报
回复
C#-->VB.NET应该都不难的,语言都是通的,只是有自己特有的语法规则...
sektor 2010-07-02
  • 打赏
  • 举报
回复
救急。解决问题,再开贴送高分。3百5百都行。谢谢谢谢!!!

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧