如何使用 libcurl(或其他方式)从 HTTP 服务器检索文件? [复制]
Posted
技术标签:
【中文标题】如何使用 libcurl(或其他方式)从 HTTP 服务器检索文件? [复制]【英文标题】:How to retrieve file from HTTP server using libcurl (or another way)? [duplicate] 【发布时间】:2014-11-23 16:05:37 【问题描述】:我正在尝试从 C 中的 yahoo Finance 获取股票报价。我知道如何获取我想要的文件,您在浏览器中输入此 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;
【问题讨论】:
【参考方案1】:尝试使用他们的示例获取文件:
http://curl.haxx.se/libcurl/c/getinmemory.html
描述:描述如何使用回调系统将文档提取到内存缓冲区中,而无需写入文件。
如果需要,您应该将数据保存到文件中。
【讨论】:
此链接显示如何将数据存储在内存中而不是文件中。看来我用同样的函数来获取数据,不同的是它们将数据存储在内存中。 您可以将缓冲区存储到文件中 是的,我的意思是除了内存存储之外,他们还使用我用来获取和存储数据的东西。我看不出获取的区别,我错过了什么吗? 您可以使用CURLOPT_WRITEDATA
传递一个FILE* 并修改代码,使其直接写入文件。或者您可以使用 write 或等效方法将整个缓冲区写入文件。
我正在使用该功能,请查看我发布的代码。我是 libcurl 的初学者,所以如果我遗漏了什么,请不要害怕告诉我一些显而易见的事情。以上是关于如何使用 libcurl(或其他方式)从 HTTP 服务器检索文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Git 的 libcurl 中不支持或禁用协议 https
libcurl 中不支持或禁用协议“https”-如何检查当前版本的 libcurl [关闭]