libcurl解压gzip编码

cocos2d-x 2.1.3使用libcurl请求数据的时候若要指定返回数据编码可以设置header如下

CCHttpRequest* request = new CCHttpRequest();
// set base param
request->setUrl(url);
request->setRequestType(type);
request->setResponseCallback(this, httpresponse_selector(yourClass::onHttpRequestCompleted));
request->setRequestData(requestDataBuffer, requestDataBufferLength);
request->setTag(tag);

// set header
std::vector<std::string> header;
header.push_back("Accept-Encoding:gzip,deflate");
request->setHeaders(header);

然后在接受数据的时候若需要libcurl自动解压数据只需要在合适的地方加上

// 最后一个参数就写一个空字符串,这样libcurl会根据返回数据解压它所支持的所有编码格式
curl_easy_setopt(handle, CURLOPT_ACCEPT_ENCODING, "");

我这里将“合适的地方”定位在了 函数:

configureCURL

里面。

反正要放在设置网络数据接受回调函数之前,也就是下面这句代码。否则会导致libcurl没有解压数据。

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);

 

 

若要检测libcurl编译的版本是否包含zlib可以加上这句代码

CCLog("curl version: %s", curl_version());

 

打印libcurl版本包含的信息。

 

参考文档:

http://curl.haxx.se/dev/readme-encoding.html

posted @ 2014-03-19 13:05  oathKeeper  阅读(3101)  评论(1编辑  收藏  举报