问题
Umm, ok, after sending some data to the server, noting this particular part:
"Accept-Encoding: gzip,deflate\r\n"
I am getting the following response:
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?
But how do I decompress it? Note that I am using the Socket Class to do all the work.
I know how to decompress it, but the problem here lies in the fact that I cannot separate the Packet from the GZipped data, psuedo-psuedocode (or whatever) on how I do it:
Socket sends packet;
Socket reads response from server, stores into a ByteArray;
Create MemoryStream, use ByteArray;
Create GZipStream, use Memorystream;
now the problem occurs; I am getting the following Error:
System.IO.InvalidDataException The magic number in GZip header is not correct. Make sure you are passing in a GZip stream.
I hope the explanation is clear enough >__>.
回答1:
The content that you need to gzip begins after a double-newline, and goes for (if present) Content-Length bytes. You might start there.
Is it possible for you to use System.Web.HttpRequest
? It will take care of a lot of the administrative details of parsing the response for you...
Or do you have to use raw Sockets?
来源:https://stackoverflow.com/questions/2619058/decompress-a-gzipped-response-from-the-server-socket