【问题标题】:Should you use curl through commandline or include the library? [closed]您应该通过命令行使用 curl 还是包含库? [关闭]
【发布时间】:2020-10-31 08:17:18
【问题描述】:

我觉得这很难证明一个比另一个更合理。我在 stackoverflow 看到很多人都做这两种变体。有些只是从他们的程序外部调用 cURL 控制台命令(例如:curl "content=hello world" -X POST https://example.com -H "charset=UTF-8")。其他人导入库并在程序内部以编程方式调用它。

所以我的问题是关于未来即将到来的项目,是否值得包含库并设置所有这些。还是从命令行调用 cURL 并读取它的响应只是一个更聪明的选择?

出于好奇,为什么不是每个人都做其中一种变体?为什么有些人使用控制台命令而其他包括库,以后可能会有一些陷阱吗?

【问题讨论】:

  • 简短的回答是肯定的。为什么?当您使用命令行变体(通过systemforkexecv)时,您将产生多个进程。如果考虑效率,那么额外的开销是一件坏事。否则它是一个清洗,但请注意curl 的输出将包含 DOS 行尾,如果在 Linux 上可能会导致意外。
  • 在没有安装 curl 应用程序的机器上你会做什么?似乎也非常基于意见。
  • @RetiredNinja 他们通常将 curl.exe 命令行应用程序放在您安装程序的位置,以防他们选择不将其包含到程序中
  • @CoffeDev 当然,但不在移动设备或控制台上。

标签: c++ curl libcurl


【解决方案1】:

尽可能使用该库。不仅适用于 cURL,一般情况下也是如此。

您绝对应该避免调用system() 或创建单独的进程来启动外部命令行应用程序。这会增加开销,并可能导致在不同平台之间移植代码时出现问题。

libcurl 还有很多功能。命令行很丰富,但 C API 更强大。

使用 libcurl 将需要比调用 curl 命令行应用程序更多的代码行,但这是正确的做法。

从 C 调用 curl 命令行应用程序通常是出于懒惰或作为节省时间的捷径。

【讨论】:

    【解决方案2】:

    libcurl 具有广泛的功能,不能轻易地用命令行来表达。如果您要构建的东西需要一次有效地处理多个传输,或者如果您需要接收 HTTP2 推送资源等高级功能,您会更喜欢它。

    curl 更易于使用。如果您只需要下载或上传一些东西,您会更喜欢它。

    仅供参考,您可以将--libcurl argument 传递给 curl 以查看如何在 libcurl 中实现 curl 命令行。

    【讨论】:

      【解决方案3】:

      我曾经同样担心是使用 libcurl 还是简单地调用命令行。

      命令行工具curl使用起来比较简单。但是如果需要在父子进程之间进行数据交换,则会产生一个子进程,然后您需要 IPC。

      虽然,使用 libcurl 更难,因为您需要阅读 API 参考并获取所需的功能,然后安排它们工作。但回报是 libcurl 更灵活、更强大。

      我的经验是我在 C++ 程序中使用system(curl) 发送 JSON 数据。该程序是单向通信。通过使用 curl 命令行,我很快完成了我的预期。但是如果我选择使用 libcurl,我相信我会在编写一行代码之前阅读文档几天。

      我还有另一个故事。询问是否使用ffmpeg工具或其库是相同的。我的项目是从视频中提取帧,然后将它们输入到其他子程序中。所以我使用 libavcodec/libavformat 左右来完成我的工作。这确实花费了更多的精力,但好在阅读互联网上的教程就足够了。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多