c - 如何使用 libcurl (或其他方式)从 HTTP 服务器检索文件?

标签 c libcurl datareader httpserver yahoo-finance

我正在尝试使用 C 语言从雅虎财经获取股票报价。我知道如何获取我想要的文件,这很简单,您可以在浏览器中输入此 URL,例如:download.finance.yahoo.com/d/quotes .csv?s=YHOO+GOOG+MSFT&f=sl1d1t1c1hgvbap2 它会自动下载文件。 我的问题是我想使用 C 程序获取这个文件,我发现 libcurl 显然可以让你做到这一点,但我的努力没有任何意义。 我想知道如何使用 libcurl 获取这样的文件,或者如果无法使用 libcurl 如何从 URL 获取文件。

这是我的 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;
}

最佳答案

尝试使用他们的示例来获取文件:

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

描述:描述如何使用回调系统将文档提取到 RAM 缓冲区中,而无需写入文件。

如果需要,您应该将数据保存到文件中。

关于c - 如何使用 libcurl (或其他方式)从 HTTP 服务器检索文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091024/

相关文章:

c++ - 内存分配中的魔数(Magic Number)

C lib 调用另一个 lib 中的全局变量

facebook - 为什么查找 ssl 证书的 curl 失败会间歇性地工作?

c - luajit ffi 实现 block 终结器

c# - 阅读器关闭时无效的阅读尝试

.net - .Net 中的 Oracle Datareader - 速度太慢(通过网络)

c - fgets() 未按预期运行

python - fseek(fp, 0, SEEK_CUR) 的副作用是什么

windows - curl : (1) Protocol https not supported or disabled in libcurl [windows XP]

sql - 指定的转换对 DataReader 无效