2016-08-02 8 views
0

libcurlを使用するC/C++でQTアプリケーションを開発しようとしています。単純に、私はファイルにVERBOSEデータを保存したいと思います。 libcurlのAPIドキュメントでは、(https://curl.haxx.se/libcurl/c/CURLOPT_VERBOSE.htmllibcurlから冗長な情報をファイルに取得する

詳細な情報がstderrに送信され、またはストリームがCURLOPT_STDERRに設定されると言われています。

したがって、VERBOSEの情報はstderrになります。そして、私がCURLOPT_STDERR(https://curl.haxx.se/libcurl/c/CURLOPT_STDERR.html)のリンクをたどった後、

パラメータとしてFILE *を渡します。プログレスメーターを表示してCURLOPT_VERBOSEデータを表示するときに、stderrの代わりにこのストリームを使用するようにlibcurlに指示します。

CURLOPT_STDERRリンクにコードサンプルがあります。

CURL *curl = curl_easy_init(); 
FILE *filep = fopen("dump.txt", "wb"); 
if (curl) { 
    curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.com"); 
    curl_easy_setopt(curl, CURLOPT_STDERR, filep); 
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 

    curl_easy_perform(curl); 
} 
CURLcode res = curl_easy_perform(curl); 


if (CURLE_OK != res) {  
    fprintf(stderr, "curl told us %d\n", res); 
} 
curl_easy_cleanup(curl); 
fclose(filep); 

しかし、詳細な情報は、コマンドラインで示されておらず、詳細な情報のために作成されたファイルが空である:私は自分のアプリケーションでそれを試してみました。どうすればこの問題を解決できますか?

+0

正しい出力は標準エラー出力に表示していますか? (ie-console) –

+0

@johnelemansこのコードでコンソールに詳細な情報が表示されません。 – user3035291

+0

コードは大丈夫です。リダイレクトなしでstderrへの出力があることを確認し、そうでなければ最初にデバッグしてください。 –

答えて

0

次の例は、私の作品:

#include <stdio.h> 
#include <curl/curl.h> 

int main(int argc, char *argv[]) 
{ 
    CURLcode ret; 
    CURL *hnd; 
    FILE* logfile; 

    logfile = fopen("dump.txt", "wb"); 

    hnd = curl_easy_init(); 
    curl_easy_setopt(hnd, CURLOPT_URL, "http://example.org"); 
    curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L); 
    curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); 
    curl_easy_setopt(hnd, CURLOPT_STDERR, logfile); 

    ret = curl_easy_perform(hnd); 

    curl_easy_cleanup(hnd); 
    fclose(logfile); 

    return (int)ret; 
} 
+0

あなたの例は私のためには機能しません。実際には、この例をコピーして使用しましたが、ログファイルはまだ空です。 – user3035291

+0

使用しているOS、コンパイラ、カールのバージョンは?私はFedora 24、GCC 6.1、カール7.47を使用していました。 –

+0

Windows 7 64ビット、VS 2015デフォルトのコンパイラとカール7.50.0 – user3035291

関連する問題