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