从服务器解压缩GZipped响应(套接字)

时间:2010-04-11 23:06:35

标签: c#-3.0

嗯,好的,在向服务器发送一些数据之后,注意到这个特定的部分:

"Accept-Encoding: gzip,deflate\r\n"

我收到以下回复:

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 09 Apr 2010 23:25:27 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.2.8
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Fri, 09 Apr 2010 23:25:27 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Content-Encoding: gzip
Vary: Accept-Encoding

7aa
??U-?Rh?%?2?w??PM]??7?qZ?K?)???2?&??m???"q??/p9w?????x?[`tA!G???G?5z??????a>k????????Q
???N??
('??f?,(??Y:5B???-?)?3x^0e:j?`,???**???F>G)?2????@???b??????A?k???Ar?n?

但是如何解压缩呢?请注意,我正在使用Socket类来完成所有工作。

我知道如何解压缩它,但这里的问题在于我无法将数据包与GZip数据分开,psuedo-psuedocode(或其他任何)如何实现它:

Socket sends packet;
Socket reads response from server, stores into a ByteArray;
Create MemoryStream, use ByteArray;
Create GZipStream, use Memorystream;

现在问题出现了;我收到以下错误:

  

System.IO.InvalidDataException   GZip标头中的幻数不是   正确。确保你传入   一个GZip流。

我希望解释清楚> __>。

1 个答案:

答案 0 :(得分:0)

gzip需要的内容在双换行符后开始,并且(如果存在)Content-Length字节。你可以从那里开始。

您是否可以使用System.Web.HttpRequest?它会处理很多解析响应的管理细节......

或者你必须使用原始套接字吗?