【问题标题】:libcurl: suppress output on stdout when invoking curl_easy_perform()libcurl:调用 curl_easy_perform() 时抑制标准输出上的输出
【发布时间】:2021-09-03 00:36:18
【问题描述】:

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

【问题讨论】:

    标签: libcurl


    【解决方案1】:

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

    话虽如此,默认情况下 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);
    

    【讨论】:

    • 调用的 URL 实际上是来自 IP 摄像机的 cgi,因此“OK”字符串是返回的内容。通过 CURLOPT_WRITEFUNCTION 选项设置写入回调有效地解决了我的问题。由于我对处理返回的内容不感兴趣,所以写回调只返回 size * nmemb 的值:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2012-08-07
    相关资源
    最近更新 更多