2016-08-02 30 views
0

Ich versuche, eine QT-Anwendung in C/C++ zu entwickeln, die libcurl verwendet. Einfach möchte ich VERBOSE Daten in eine Datei speichern. In Libcurl API Dokumentation, wird gesagt, dass (https://curl.haxx.se/libcurl/c/CURLOPT_VERBOSE.html)Ausführliche Informationen von libcurl zu einer Datei

Die ausführlichen Informationen werden Stderr gesendet werden, oder der Strom mit CURLOPT_STDERR eingestellt.

Also, VERBOSE Informationen werden bei stderr sein. Und nachdem ich den Link für CURLOPT_STDERR (https://curl.haxx.se/libcurl/c/CURLOPT_STDERR.html) gefolgt ist, die erzählt,

übergeben Sie eine FILE * als Parameter. Sagen Sie libcurl, diesen Stream anstelle von stderr zu verwenden, wenn Sie den Fortschrittszähler anzeigen und CURLOPT_VERBOSE-Daten anzeigen.

Bei der Verknüpfung CURLOPT_STDERR existiert ein Codebeispiel. Ich habe versucht, es auf meiner eigenen Anwendung wie:

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); 

jedoch ausführliche Informationen nicht auf der Kommandozeile angezeigt und die Datei, die für die ausführliche Information erstellt wird, ist leer. Wie kann ich dieses Problem lösen?

+0

Ist die korrekte Ausgabe auf stderr auftauchen? (ie-console) –

+0

@johnelemans ausführliche Informationen werden mit diesem Code nicht auf der Konsole angezeigt. – user3035291

+0

Der Code sieht gut aus. Bestätigen Sie, dass die Ausgabe an stderr ohne die Umleitung erfolgt, und wenn nicht, debuggen Sie zuerst. –

Antwort

0

Das folgende Beispiel funktioniert für mich:

#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

Ihr Beispiel funktioniert nicht für mich. Eigentlich habe ich dieses Beispiel kopiert und benutzt, allerdings ist die Protokolldatei noch leer. – user3035291

+0

Welche OS, Compiler und Curl-Version verwenden Sie? Ich benutzte Fedora 24, GCC 6.1 und Curl 7.47. –

+0

Windows 7 64-Bit, VS 2015 Standard-Compiler und Curl 7.50.0 – user3035291