Click here to Skip to main content
11,924,995 members (48,810 online)
Rate this:
Please Sign up or sign in to vote.
See more: C++ Sockets
hi all

i use socket to fetch the html page

and the request tag "Accept-Encoding:gzip" so i recieve a compress data

i try use zlib to uncompress but i failed when i call function inflate

i use the code follow:

#define CHUNK 16384
int inflate_read(char *source,int len,char **dest,int gzip) 
	int ret; 
	unsigned have; 
	z_stream strm; 
	unsigned char out[CHUNK] = {0}; 
	int totalsize = 0; 
	/* allocate inflate state */ 
	strm.zalloc = Z_NULL; 
	strm.zfree = Z_NULL; 
	strm.opaque = Z_NULL; 
	strm.avail_in = 0; 
	strm.next_in = Z_NULL; 
		ret = inflateInit2(&strm, 47); 
		ret = inflateInit(&strm); 
	if (ret != Z_OK) 
		return ret; 
	strm.avail_in = len; 
	strm.next_in = (Bytef*)source; 
	/* run inflate() on input until output buffer not full */ 
	do { 
		strm.avail_out = CHUNK; 
		strm.next_out = out; 
		ret = inflate(&strm, Z_NO_FLUSH); 
		assert(ret != Z_STREAM_ERROR); /* state not clobbered */ 
		switch (ret) { 
		case Z_NEED_DICT: 
			ret = Z_DATA_ERROR; /* and fall through */ 
		case Z_DATA_ERROR: 
		case Z_MEM_ERROR: 
			return ret; 
		have = CHUNK - strm.avail_out; 
		totalsize += have; 
		*dest = (char*)realloc(*dest,totalsize); 
		memcpy(*dest + totalsize - have,out,have); 
	} while (strm.avail_out == 0); 
	/* clean up and return */ 
	return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR; 

someone can help me how to uncompress data and uncompress data with "Transfer-Encoding: chunked"

thank you
Posted 3-Jan-12 19:46pm
Albert Holguin 8-Jan-12 1:33am
This looks like C... are you sure it's tagged correctly? Also, posting a solution to your question moves your question out of the "unanswered" category, reducing your odds of getting help, so don't do that in the future.

1 solution

Rate this: bad
Please Sign up or sign in to vote.

Solution 2

This code gets html page. Put html page's address to fetch instead of Below posted code is from[^]

#include <stdio.h>
int main(void)
  CURL *curl;
  CURLcode res;
  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "");
    res = curl_easy_perform(curl);
    /* always cleanup */ 
  return 0;

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy | Mobile
Web03 | 2.8.151125.3 | Last Updated 14 May 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100