用pocolibrary下载二进制文件

时间:2015-03-11 10:04:04

标签: c++ poco-libraries

更新: 我通过用istreambuf_iterator替换istream_iterator来修复它。

我尝试使用poco下载二进制文件。 它似乎不能正确加载文件,因为内容长度!=实际下载的长度。

        Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort());
        Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, uri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);

        Poco::Net::HTTPResponse response;

        session.sendRequest(request);
        std::istream& rs = session.receiveResponse(response);
        int contentlen = response.getContentLength();

        std::vector<char> bytes;
        std::copy(std::istream_iterator<char>(rs), std::istream_iterator<char>(), std::back_inserter(bytes));
        int byteslen = bytes.size();

这里contentlen = 297008和byteslen = 290420。 结果,下载的图像已损坏。 如果我使用curl下载图像,它可以正常工作,下载大小= 297008。 怎么了? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

请参阅Poco forum answer

另请参阅download example

std::auto_ptr<std::istream> pStr(URIStreamOpener::defaultOpener().open(uri));
StreamCopier::copyStream(*pStr.get(), std::cout);