gpt4 book ai didi

c++ - 使用 std::streambuf 包装 libcurl 以进行上传?

转载 作者:太空宇宙 更新时间:2023-11-04 13:57:29 24 4
gpt4 key购买 nike

我已经实现了 std::streambuf API 的读取部分(即 underflow()xsgetn()) libcurl 以便普通的 istream 可以插入这样的 streambuf 并从 HTTP 或 FTP 服务器检索内容。效果很好。

现在我想实现 API 的写入部分(即 overflow()xsputn())以将文件上传到 FTP 服务器像这样的东西:

ostream os( my_curl_streambuf );
curl_easy_setopt( my_curl_handle, CURLOPT_UPLOAD, 1L );
os << is->rdbuf(); // copy entire contents of istream "is" to ostream "os"

问题在于 libcurl 通过 CURLOPT_READFUNCTION 设置的读取回调函数使用“拉”API,而上面的最后一行代码是“推”的方式。

这可以工作吗?即,将 libcurl 与 streambuf API 包装起来,以用于读取 写入?

最佳答案

我对 libcurl API 的了解还不够,但我希望它会提取数据,直到所有数据都用完为止。由于 IOStreams 有一个推接口(interface),它不会轻易地与拉接口(interface)结合,所以你最好实现一个流,它缓冲所有输出直到它完成,此时有 libcurl pull 以获得现成的缓冲区。您可能会让 sync() 什么都不做,而是在您的流上提供自定义函数,例如 send(),这是将控制权移交给 libcurl 的触发器,直到它的生意不景气了。

另一种方法是使用 libcurl 的一个线程来拉取数据,另一个线程写入流并提供在拉取数据时写入 libcurl 的位。

关于c++ - 使用 std::streambuf 包装 libcurl 以进行上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com