CURLOPT_VERBOSE不是';t发送到STDERR
Ubuntu20.04使用libcurl和以下代码,我可以从命令行查看输出。 但是,当重定向输出CURLOPT_VERBOSE不是';t发送到STDERR,curl,Curl,Ubuntu20.04使用libcurl和以下代码,我可以从命令行查看输出。 但是,当重定向输出/run_me 2>&1>output.log时,cURL输出仍然显示在屏幕上,并且不会重定向到output.log文件 cURL文档说明,不设置CURLOPT\u STDERR的CURLOPT\u VERBOSE应转到STDERR。然而,似乎并非如此 如何将cURL输出重定向到STDERR CURL* curl = curl_easy_init(); char errBuff[CURL_ERROR_
/run_me 2>&1>output.log
时,cURL输出仍然显示在屏幕上,并且不会重定向到output.log
文件
cURL文档说明,不设置CURLOPT\u STDERR
的CURLOPT\u VERBOSE
应转到STDERR
。然而,似乎并非如此
如何将cURL输出重定向到STDERR
CURL* curl = curl_easy_init();
char errBuff[CURL_ERROR_SIZE];
if(curl) {
struct MemoryStruct chunk;
chunk.size = 0;
chunk.memory = calloc(1,sizeof(*chunk.memory));
if ( !chunk.memory ) {
return CURLE_FAILED_INIT;
}
(void)curl_easy_setopt(curl, CURLOPT_URL, url);
(void)curl_easy_setopt(curl, CURLOPT_POST, 1L);
(void)curl_easy_setopt(curl, CURLOPT_USERNAME, username);
(void)curl_easy_setopt(curl, CURLOPT_PASSWORD, password);
(void)curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, CONNECTION_TIMEOUT);
(void)curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
(void)curl_easy_setopt(curl, CURLOPT_CAINFO, trustStore);
(void)curl_easy_setopt(curl, CURLOPT_SSLCERT, clientCert);
(void)curl_easy_setopt(curl, CURLOPT_SSLKEY, clientKey);
(void)curl_easy_setopt(curl, CURLOPT_KEYPASSWD, clientKeyPass);
(void)curl_easy_setopt(curl, CURLOPT_VERBOSE, 1 );
(void)curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errBuff );
errBuff[0] = 0; // empty the error buffer
(void)curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
(void)curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
struct curl_slist* list = NULL;
list = curl_slist_append(NULL, "Content-Type: application/json");
list = curl_slist_append(list, "Accept: application/json");
char clBuf[30];
(void)snprintf(clBuf, 30, "Content-Length: %d", (int)strlen(postData));
list = curl_slist_append(list, clBuf);
(void)curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
(void)curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);
long httpCode = 0;
int res = CURLE_FAILED_INIT;
res = curl_easy_perform(curl);
(void)curl_easy_getinfo(curl, CURLINFO_HTTP_CODE, &httpCode);
}
答案与shell如何处理重定向的顺序有关 从bash手册: 请注意,重定向的顺序很重要。例如 命令 将标准输出和标准错误定向到文件目录列表, 当命令
ls 2>&1 > dirlist
仅将标准输出定向到文件目录列表,因为标准
在标准输出之前,从标准输出复制了错误
输出被重定向到目录列表
将命令更改为
/run\u me>output.log 2>&1
将导致curl的详细输出也被重定向到该文件。谢谢!我忘了Linux的警告。
ls 2>&1 > dirlist