最近我正在使用libcurl构建一个从互联网抓取网页的程序,我发现当使用分块编码的响应时,libcurl无法获取块头。然后我查看了libcurl在线文档,它说chunk header by WriteFunction,我正在使用libcurl版本2.18,并且我为CURLOPT_WRITEFUNCTION和CURLOPT_HEADERFUNCTION设置了一个回调,他们除了一个关于块头的char之外什么都没有,是否有关于块编码的libcurl的问题?我怎样才能让它正常工作?谢谢p.s.我想抓的网是http://list.taobao.com/browse/cat-0.htm,这是一个使用gbk编码的中文网站
这是我对cliburl的设置
int32_t progress = 0;
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_NOPROGRESS, progress) == CURLE_OK);
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_HEADER, 1) == CURLE_OK);
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_DEBUGFUNCTION, &HttpSpider::curl_debug_callback) == CURLE_OK);
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_HTTP_TRANSFER_DECODING, 1) == CURLE_OK);
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_WRITEFUNCTION, &HttpSpider::_ProcessRecvString) == CURLE_OK);
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_HEADERFUNCTION, &HttpSpider::_ProcessRecvHeader) == CURLE_OK);
PROCESS_ERROR(curl_easy_setopt(handle_, CURLOPT_PROGRESSFUNCTION, &HttpSpider::_ProcessRecvProgress) == CURLE_OK);
//这是其他的东西
result = curl_easy_setopt(inst->handle_, CURLOPT_HTTPGET, 1);
result = curl_easy_setopt(inst->handle_, CURLOPT_PROGRESSDATA, param);
result = curl_easy_setopt(inst->handle_, CURLOPT_WRITEDATA, param);
result = curl_easy_setopt(inst->handle_, CURLOPT_WRITEHEADER, param);
result = curl_easy_setopt(inst->handle_, CURLOPT_URL, *url);
printf("/********** HTTP GET **********/\n");
//try to perform a post action
result = curl_easy_perform(inst->handle_);
回调被声明为必需,缓冲区中的块长度传递给debugfunction,但是在writefunction中没有,我怎么能在writefunction中得到它
答案 0 :(得分:0)
libcurl自动且无条件地支持分块编码,而无需应用程序执行任何操作。
如果你还没有得到任何数据,那就有某种问题/错误/问题...