在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';这代表什么意思?是否是这个引起的呢?
试试通过这个来获取:
context.Request.Headers["Content-Encoding"]
可以参考一下stackoverflow上提到的一个方法:
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip |
DecompressionMethods.Deflate;
var request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
这句是拿到目标站的cookie是吧
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
这句在设置Headers中我已经放入了 .Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate") 若按照您这句设置,反而会造成乱码
现在还是一样的拿不到,请各位朋友帮帮忙啊!
加了AcceptEncoding头后,服务器认为你支持gzip,就按gzip格式传输了,而你又没有解压,自然就乱码了
我觉得支持 gzip 需要在 IIS 中配置,不需要编程。
我只用过 Apache/Tomcat,都是通过改变配置就可以了。
补充:
Optimize IIS Performance (IIS 7)
http://technet.microsoft.com/en-us/library/cc770381(WS.10).aspx
是否gzip和浏览器的行为有关。你通过浏览器访问,浏览器发送的http请求中含有Accept-Encoding gzip, deflate
表示我本地浏览器可以解压gzip的东东,服务端就会给你返回gzip压过的东东来节省流量。
你使用模拟发送请求时,没必要加这个Accept-Encoding头,服务器就认为你的请求不能接收gzip的东东,就反给你没有压过的东东,你也不需要解压
现在的浏览器,应该都自动发 Accept-Encoding头吧?
@Jacklondon Chen:恩,只有以前的IE4貌似不支持gzip。