【问题标题】:How to save a curl download in a std::string?如何将 curl 下载保存在 std::string 中?
【发布时间】:2018-12-24 01:38:03
【问题描述】:

我知道我可以从 c++ 程序调用 system("curl path-LJO") 来下载文件并将其保存在当前目录中,然后我可以使用 STL 将其保存到 std::string。但是有没有办法将它直接保存在 std::string 中?我知道 abot https://github.com/curl/curl 但我想知道: curl 命令中是否有任何说明符可以做到这一点?如果没有,解决这个问题的最佳方法是什么?

【问题讨论】:

  • libcurl 可以让你调用 curl 而不需要创建一个单独的进程,那么你就不用担心进程间通信了
  • 您可以将子进程的输出重定向到管道并从中读取输出。但是,您如何做到这一点取决于平台。请参阅 POSIX 系统上的 popenfork/exec 和 Windows 上的 CreateProcess。除了非常有限的system 函数之外,C++ 标准库中没有任何子进程管理工具。

标签: c++ curl


【解决方案1】:

您需要在代码中使用libcurl 库。您可以使用CURLOPT_READFUNCTIONCURLOPT_READDATA 选项设置回调,将接收到的数据直接保存到std::string 变量中。

【讨论】:

  • 所以我必须使用库?没有办法只使用 OS cmd 命令吗?
  • @user2000 如果需要,您可以使用低级套接字编写代码。但它涉及更多beej.us/guide/bgnet/html/single/bgnet.html (你也需要学习HTTP 协议。)
  • @user2000 cmd 命令无法直接写入进程内的变量。但是有一些解决方法,比如 Miles 提到的。但是curl.exe 只是libcurl 库的包装,所以去掉中间人,直接使用libcurl。当然,您可以直接使用套接字,但是您必须手动实现 HTTP 协议,而这并非易事。 libcurl已经完成了艰苦的工作。或者使用任何现成的预制 HTTP 库。
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
相关资源
最近更新 更多