libcurl + openssl不能下载大于2GB的文件

libcurl + openssl cannot download files bigger than 2GB

本文关键字:2GB 文件 大于 下载 openssl 不能 libcurl      更新时间:2023-10-16

我正在尝试使用libcurl 7.20.0和openssl 0.9.81下载文件(但我将库更新为7.29.0和1.0.1e), Windows 7和所有内容都在编译amd64下载大文件。我使用curlpp作为curl的包装。问题是,一旦达到2GB,下载就会停止,错误为Failed writing body (0 != 8999)。我用来执行请求的代码是:

boost::shared_ptr<curlpp::Easy> curl_request(boost::make_shared<curlpp::Easy>());
curl_request.setOpt(new curlpp::options::HttpVersion(CURL_HTTP_VERSION_1_0));
curl_request.setOpt(new curlpp::options::Timeout(3600));
curl_request.setOpt(new curlpp::options::SslVerifyHost(0));
curl_request.setOpt(new curlpp::options::SslVerifyPeer(0));
curl_request->setOpt(new curlpp::options::Url(request_uri));
if (cookies.size() == 0) {
    curl_request->setOpt(new curlpp::options::CookieList("dummy"));
} else {
    BOOST_FOREACH(const std::string &cookie, m_cookies) {
        curl_request->setOpt(new curlpp::options::CookieList(cookie));
    }
}
curl_request->setOpt(new curlpp::options::Post(true));
curl_request->setOpt(new curlpp::options::PostFields(query_string));
curl_request->setOpt(new curlpp::options::WriteStream(stream.get()));
try {
    curl_request->perform();
} catch (std::exception &ex) {
    error = true;
    std::cerr << "caught Unknown error: " << ex.what() << std::endl;
}

编辑流是一个字符串流,我使用MS VS 2008

这不是libcurl或OpenSSL的限制。这可能是您的文件系统(FAT?)或WriteStream实现(或类似的)阻止了此工作。

错误消息似乎暗示突然写入磁盘失败,这可能是因为写入溢出了支持的最大大小。