Не могу записать файл, который я скачал, используя curl в C - PullRequest
0 голосов
/ 15 ноября 2010

У меня есть код на C, использующий curl, который я хочу использовать для загрузки файла csv.Когда я использую его, вместо того, чтобы получать и записывать файл на диск, он записывает HTML-код веб-страницы или вообще ничего не записывает.Вот мой код:

size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    return fwrite(ptr, size, nmemb, stream);
}

void *downloadFile(void *ptr)
{
    CURL *curl;
    CURLcode res;
    FILE *outfile;
    char *symbol = (char *)ptr;

    curl = curl_easy_init();
    if(curl)
    {
        outfile = fopen(symbol, "w");
        char url[100] = "http://finance.yahoo.com/d/quotes.csv?s=";
        strcat(url, symbol);
        strcat(url, "&f=npl1");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);

        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        fclose(outfile);
    }
}

1 Ответ

0 голосов
/ 19 сентября 2014

Как написано на официальном документе:

Внутренняя функция по умолчанию записывает данные в ФАЙЛ *, заданный с помощью CURLOPT_WRITEDATA.

Итак, для вашего приложения вам не нужно делать функцию обратного вызова.

void *downloadFile(void *ptr)
{
    CURL *curl;
    CURLcode res;
    FILE *outfile;
    char *symbol = (char *)ptr;

    curl = curl_easy_init();
    if(curl)
    {
        outfile = fopen(symbol, "w");
        char url[100] = "http://finance.yahoo.com/d/quotes.csv?s=";
        strcat(url, symbol);
        strcat(url, "&f=npl1");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);

        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        fclose(outfile);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...