libcURL -如何在c++中停止向命令行输出

libcURL - How to stop output to command line in c++

本文关键字:命令行 输出 c++ libcURL      更新时间:2023-10-16

如何在libcurl中阻止/删除/停止打印/输出到命令行?由于某种原因,下面的代码可以用于url,但是当我点击带有图像的页面时,比如http://192.168.123.123/banana.gif,它就崩溃了:

CURL *session;
session = curl_easy_init();
curl_easy_setopt(session, CURLOPT_URL, "http://192.168.123.123/banana.gif");
CURLcode curl_code = curl_easy_perform (session);
long http_code = 0;
curl_easy_getinfo(session, CURLINFO_RESPONSE_CODE, &http_code);

这是因为您没有设置CURLOPT_WRITEDATA选项:

内部CURLOPT_WRITEFUNCTION会将数据写入带有该选项的FILE *,如果没有设置,则写入到stdout。

如果您决定完全忽略响应数据,您可以做的是将其写入/dev/null:

/* ... */
FILE *devnull = fopen("/dev/null", "w+");
curl_easy_setopt(session, CURLOPT_WRITEDATA, devnull);
CURLcode curl_code = curl_easy_perform(session);
fclose(devnull);
/* ... */

另一种选择是使用NOOP写函数:

curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, noop_cb);

其中write函数只是返回接收到的字节数:

size_t noop_cb(void *ptr, size_t size, size_t nmemb, void *data) {
  return size * nmemb;
}