微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。