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

cod*_*ark 6 c++ curl libcurl

如何在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);
Run Code Online (Sandbox Code Playgroud)

del*_*eil 11

这是因为您没有设置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);

/* ... */
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用NOOP 写入功能:

curl_easy_setopt(session, CURLOPT_WRITEFUNCTION, noop_cb);
Run Code Online (Sandbox Code Playgroud)

write函数只返回接收的字节数:

size_t noop_cb(void *ptr, size_t size, size_t nmemb, void *data) {
  return size * nmemb;
}
Run Code Online (Sandbox Code Playgroud)