2014-11-23 4 views
0

Я пытаюсь получить котировки акций из yahoo finance в C. Я знаю, как получить файл, который я хочу, достаточно просто ввести этот URL-адрес в свой браузер, например: download.finance.yahoo.com/d/quotes. csv? s = YHOO + GOOG + MSFT & f = sl1d1t1c1hgvbap2, и он автоматически загружает файл. Моя проблема в том, что я хотел получить этот файл с помощью программы на языке C, я нашел libcurl, который, по-видимому, позволяет вам это делать, но мои усилия не связаны ни с чем. Я хотел бы знать, как получить такой файл с помощью libcurl или если с libcurl невозможно получить файл из URL-адреса.Как получить файл с HTTP-сервера с помощью libcurl (или по-другому)?

Это мой Libcurl код для извлечения файла, который не работал (не ошибка просто пустой файл в конце):

#define CURL_STATICLIB 
#include <stdio.h> 
#include <curl/curl.h> 
#include <curl/easy.h> 
#include <string.h> 

size_t write_data(void* ptr,size_t size,size_t nmemb,FILE* stream){ 
    size_t written; 
    written=fwrite(ptr,size,nmemb,stream); 
} 

int main(void){ 
    CURL* curl; 
    FILE* fp; 
    CURLcode res; 
    char* url="http://download.finance.yahoo/d/quotes.csv?s=YHOO+GOOG+MSFT&f=sl1d1t1c1hgvbap2"; 
    //char* url="https://marketviewer.equiduct.com"; 
    char outfilename[FILENAME_MAX]="test.txt"; 
    curl=curl_easy_init(); 
    if(curl){ 
     fp=fopen(outfilename,"wb"); 
     curl_easy_setopt(curl,CURLOPT_URL, url); 
     curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data); 
     curl_easy_setopt(curl,CURLOPT_WRITEDATA,fp); 
     res=curl_easy_perform(curl); 
     curl_easy_cleanup(curl); 
     fclose(fp); 
    } 
    else { 
     printf("Error !!!\n"); 
    } 
    return 0; 
} 

ответ

0

попробовать использовать их пример для получения файла:

http://curl.haxx.se/libcurl/c/getinmemory.html

описание: описывает, как вы можете использовать систему обратного вызова для извлечения документов в буфер буфера без необходимости записи файлов.

Вы должны сохранить данные в файл, если необходимо.

+0

Эта ссылка показывает, как хранить данные в памяти, а не в файле. Кажется, что я использую одни и те же функции для получения данных, разница в том, что они хранят данные в памяти. – PiggyGenius

+0

вы можете сохранить буфер в файл –

+0

Да, я имел в виду, что помимо памяти они используют то, что я использую, чтобы получать данные и хранить их. Я не вижу разницы в получении, я что-то упускаю? – PiggyGenius