libcurl:调用 curl_easy_perform() 时抑制 stdout 上的输出

问题描述

我正在使用 libcurl 对给定的 url 执行简单的 http GET。一切正常,包括用户身份验证,但我无法避免在调用 curl_easy_perform() 时打印“OK”消息(我认为“OK”对应于 200 http 返回码)。 我尝试使用 CURLOPT_STDERR 将 stderr 输出重定向到其他地方,但实际上似乎打印是在 stdout 上完成的。 任何人都可以帮忙吗?提前致谢。

解决方法

首先,您应该展示您的代码,以便其他人可以适当地帮助您。

话虽如此,cURL 默认将结果打印到标准输出 - 难道“OK”只是您的页面返回的内容?如果是这种情况,您可以使用 CURLOPT_WRITEFUNCTION 将响应重定向到变量或文件(或丢弃它)。

将响应写入变量的示例函数(取自上面链接的 cURL 文档):

struct memory {
  char *response;
  size_t size;
};
     
static size_t cb(void *data,size_t size,size_t nmemb,void *userp) {
  size_t realsize = size * nmemb;
  struct memory *mem = (struct memory *)userp;
     
  char *ptr = realloc(mem->response,mem->size + realsize + 1);
  if(ptr == NULL)
    return 0;  /* out of memory! */
     
  mem->response = ptr;
  memcpy(&(mem->response[mem->size]),data,realsize);
  mem->size += realsize;
  mem->response[mem->size] = 0;
     
  return realsize;
}
     
struct memory chunk = {0};
     
/* send all data to this function  */
curl_easy_setopt(curl_handle,CURLOPT_WRITEFUNCTION,cb);
     
/* we pass our 'chunk' struct to the callback function */
curl_easy_setopt(curl_handle,CURLOPT_WRITEDATA,(void *)&chunk);