libcurl обрабатывает фрагментарный ответ - PullRequest
1 голос
/ 12 ноября 2011

В последнее время я создаю программу захвата веб-страниц из Интернета с помощью 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_);  

обратные вызовы объявляются как обязательные, длина буфера в буфере передается в функцию отладки, но не в функцию записи, как я могу получить ее в функции записи

1 Ответ

0 голосов
/ 14 ноября 2011

libcurl поддерживает chunked-кодировку автоматически и без каких-либо условий, при этом приложению ничего не нужно делать.

Если данные по-прежнему не получены, возникает какая-то проблема / ошибка / проблема ...

...