В последнее время я создаю программу захвата веб-страниц из Интернета с помощью libcurl, и обнаружил, что когда ответ использует chunked-кодировку, libcurl не может получить заголовок чанка. Затем я изучил онлайн-документацию libcurl, он говорит, что заголовок чанка обрабатывается WriteFunction, я использую libcurl версии 2.18, и я установил обратный вызов для CURLOPT_WRITEFUNCTION и CURLOPT_HEADERFUNCTION, они получили что-нибудь, кроме одного символа о заголовке чанка, есть ли проблемы в libcurl с чанк-кодированием? как я могу заставить его работать должным образом? Сеть, которую я пытаюсь получить, это 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_);
обратные вызовы объявляются как обязательные, длина буфера в буфере передается в функцию отладки, но не в функцию записи, как я могу получить ее в функции записи