最近我正在用libcurl构建一个从互联网上抓取网页的程序,我发现当使用分块编码的响应时,libcurl无法获取块头。然后我查看了libcurl在线文档,它说块头由WriteFunction处理,我我正在使用 libcurl 版本 2.18,并且我为 CURLOPT_WRITEFUNCTION 和 CURLOPT_HEADERFUNCTION 设置了回调,除了块头的单个字符之外,他们得到了任何东西,关于块编码的 libcurl 有问题吗?我怎样才能让它正常工作?谢谢ps 我要抓取的网站是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_);
回调是根据需要声明的,缓冲区中有块长度传递给调试函数,但在 writefunction 中没有,我如何在 writefunction 中获取它