У меня возникла странная проблема с 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.
Вы просмотрели этот https://curl.haxx.se/libcurl/c/getinmemory.html? – PnotNP
@NulledPointer Я не вижу актуальности? Кроме того, проверьте последнее редактирование на OP. – caseif
Кажется, что не проблема с кодом, и поскольку это происходит только при компиляции на определенной машине, я бы сказал, что машина использует некорректную версию libcurl –