首页 新闻 搜索 专区 学院

求助 关于GZIP压缩!

0
悬赏园豆:200 [待解决问题]

在httpwatch中,可以看到返回的头信息包含有 Content-Encoding gzip 的信息,表示其流已被GZIP压缩过。

但抓取页面时,判断是否有GZIP压缩:

[code=VB.NET]
......
Using newStream As Stream = request.GetRequestStream()
                    newStream.Write(valbyte, 0, valbyte.Length)
                End Using
                ' 返回响应流。
                response = CType(request.GetResponse(), HttpWebResponse)
                Dim tmp_response As HttpWebResponse = response
                If Not IsNothing(response.GetResponseStream()) Then
                    If response.ContentEncoding <> "gzip" Then
......
[/code]

却发现返回的response中不知为何并没有gzip的信息,Content-Encoding 为空字符串。于是按着没有压缩的方法 resultstr = sr.ReadToEnd 得到空字符,强行解压,又抛出无gzip头的错误,求解!

另外在httpwatch中,overview中有Connect选项:Connect  Connect to IP address 'xxx.xxx.xx.xx';这代表什么意思?是否是这个引起的呢?

lalala002的主页 lalala002 | 初学一级 | 园豆:0
提问于:2011-09-11 04:55
< >
分享
所有回答(4)
0

试试通过这个来获取:

context.Request.Headers["Content-Encoding"]

artwl | 园豆:16536 (专家六级) | 2011-09-11 08:59
0

可以参考一下stackoverflow上提到的一个方法:

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.Headers.Add(HttpRequestHeader.AcceptEncoding,
"gzip,deflate");
request.AutomaticDecompression
= DecompressionMethods.GZip |
DecompressionMethods.Deflate;

dudu | 园豆:36424 (高人七级) | 2011-09-11 11:20

var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
这句是拿到目标站的cookie是吧
request.Headers.Add(HttpRequestHeader.AcceptEncoding,
"gzip,deflate");
这句在设置Headers中我已经放入了 .Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate") 若按照您这句设置,反而会造成乱码

现在还是一样的拿不到,请各位朋友帮帮忙啊!

支持(0) 反对(0) lalala002 | 园豆:0 (初学一级) | 2011-09-11 21:19

加了AcceptEncoding头后,服务器认为你支持gzip,就按gzip格式传输了,而你又没有解压,自然就乱码了

支持(0) 反对(0) Gray Zhang | 园豆:17610 (专家六级) | 2011-09-12 14:47
0

我觉得支持 gzip 需要在 IIS 中配置,不需要编程。
我只用过 Apache/Tomcat,都是通过改变配置就可以了。

补充:

Optimize IIS Performance (IIS 7)
http://technet.microsoft.com/en-us/library/cc770381(WS.10).aspx

杰克伦敦尘 | 园豆:274 (菜鸟二级) | 2011-09-13 22:25
0

是否gzip和浏览器的行为有关。你通过浏览器访问,浏览器发送的http请求中含有Accept-Encoding gzip, deflate

表示我本地浏览器可以解压gzip的东东,服务端就会给你返回gzip压过的东东来节省流量。

 

你使用模拟发送请求时,没必要加这个Accept-Encoding头,服务器就认为你的请求不能接收gzip的东东,就反给你没有压过的东东,你也不需要解压

调调儿 | 园豆:155 (初学一级) | 2011-09-14 13:12

现在的浏览器,应该都自动发 Accept-Encoding头吧?

支持(0) 反对(0) 杰克伦敦尘 | 园豆:274 (菜鸟二级) | 2011-09-14 17:47

@Jacklondon Chen:恩,只有以前的IE4貌似不支持gzip。

支持(0) 反对(0) 调调儿 | 园豆:155 (初学一级) | 2011-09-14 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册