2016-10-09 2 views
1

У меня возникла странная проблема с libcurl. По сути, при загрузке файла с HTTP-сервера он выводит некоторые байты для мусора в конце файла. В то время как файл должен быть 1,710,017 байт, библиотека вместо этого пишет 1,712,128, то есть 2,111 больше. Я подозреваю, что это какая-то проблема буферизации, поскольку последнее число кратно 2^12 (и 2^13, но в других случаях оно соответствует кратным 2^12). Дополнительные данные - либо соответствующее количество байтов, считанных из другой части файла (это только кажется, что читается с одного из четырех адресов каждый раз, все ближе к концу), или в одном случае байт CD повторяется 2,111 раз.libcurl, выводящий лишние байты при загрузке файла

Соответствующий код:

std::string url; // defined elsewhere 
FILE* data; // initialized elsewhere with option "wb" 
CURL* query = curl_easy_init(); 

curl_easy_setopt(query, CURLOPT_WRITEDATA, data); 
curl_easy_setopt(query, CURLOPT_URL, url); 
curl_easy_setopt(query, CURLOPT_FOLLOWLOCATION, true); 
curl_easy_setopt(query, CURLOPT_SSL_VERIFYPEER, false); 

CURLcode res = curl_easy_perform(query); 

Кроме того: та же проблема возникает при использовании простого обратного вызова для записи, и проблема возникает при любом удаленном сервере, а не только этой конкретными один.

Редактировать # 1: Я могу реплицировать это только на Windows (протестирован на двух машинах с одинаковыми библиотечными файлами). Он работает на Debian.

Редактировать # 2: Это также происходит, когда libcurl построен на моем ноутбуке. Чтобы обеспечить дополнительный контекст, я создаю из ZIP-архива Марка Хёрскена (доступного на официальной странице загрузки скручиваний), используя среду VC14 в Windows 10.

+0

Вы просмотрели этот https://curl.haxx.se/libcurl/c/getinmemory.html? – PnotNP

+0

@NulledPointer Я не вижу актуальности? Кроме того, проверьте последнее редактирование на OP. – caseif

+0

Кажется, что не проблема с кодом, и поскольку это происходит только при компиляции на определенной машине, я бы сказал, что машина использует некорректную версию libcurl –

ответ

0

Я делаю это с некоторой неприятной ошибкой VC или иным аномальным поведением. Перезаписать код проблемы для использования fstream вместо FILE сделал трюк.

Смежные вопросы