如何从C中的URL下载文件,作为浏览器?

时间:2014-11-23 18:47:44

标签: c download server httpserver data-retrieval

我想从网址下载文件,这个文件:http://download.finance.yahoo/d/quotes.csv?s=YHOO+GOOG+MSFT&f=sl1d1t1c1hgvbap2 当我浏览器并在浏览器中输入此URL时,文件会自动下载。 我想要的是下载这个文件,而无需使用C语言的程序浏览我的浏览器,我需要这种类型的信息用于金融项目。 我尝试使用libcurl下载该文件,但是libcurl会下载与此URL相对应的HTML页面,当然这是空的,因为此URL所做的唯一事情就是开始下载。 我想这个URL是某种HTTP服务器的方式,但我完全迷失了如何获取这个文件。

请您提前感谢您的时间和帮助,如果您可以通过解释或更好地使用C代码帮助您,请随时这样做,并且不要害怕过于精确。

1 个答案:

答案 0 :(得分:5)

使用libcurl,然后查看this examples page

如果您想让它工作,也可以使用命令行curl,并使用--libcurl选项。我怀疑这个问题可能与javascript,cookies,登录等等有关。所有这些都是可溶的,但可以使用命令行来使其工作。我的诊断是.com之后您的网址丢失yahoo

例如:

curl --silent --libcurl /tmp/test.c 'http://download.finance.yahoo.com/d/quotes.csv?s=YHOO+GOOG+MSFT&f=sl1d1t1c1hgvbap2'

生成输出到屏幕:

"YHOO",51.04,"11/21/2014","4:00pm",-0.21,52.25,50.99,22226984,N/A,52.49,"-0.41%"
"GOOG",537.50,"11/21/2014","4:00pm",+2.67,542.14,536.56,2218249,N/A,575.00,"+0.50%"
"MSFT",47.98,"11/21/2014","4:00pm",-0.72,49.05,47.57,42884796,N/A,49.05,"-1.48%"

并生成代码:

/********* Sample code generated by the curl command line tool **********
 * All curl_easy_setopt() options are documented at:
 * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
 ************************************************************************/
#include <curl/curl.h>

int
main (int argc, char *argv[])
{
  CURLcode ret;
  CURL *hnd;

  hnd = curl_easy_init ();
  curl_easy_setopt (hnd, CURLOPT_URL,
                    "http://download.finance.yahoo.com/d/quotes.csv?s=YHOO+GOOG+MSFT&f=sl1d1t1c1hgvbap2");
  curl_easy_setopt (hnd, CURLOPT_NOPROGRESS, 1L);
  curl_easy_setopt (hnd, CURLOPT_USERAGENT, "curl/7.35.0");
  curl_easy_setopt (hnd, CURLOPT_MAXREDIRS, 50L);
  curl_easy_setopt (hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

     CURLOPT_WRITEDATA set to a objectpointer
     CURLOPT_WRITEFUNCTION set to a functionpointer
     CURLOPT_READDATA set to a objectpointer
     CURLOPT_READFUNCTION set to a functionpointer
     CURLOPT_SEEKDATA set to a objectpointer
     CURLOPT_SEEKFUNCTION set to a functionpointer
     CURLOPT_ERRORBUFFER set to a objectpointer
     CURLOPT_STDERR set to a objectpointer
     CURLOPT_HEADERFUNCTION set to a functionpointer
     CURLOPT_HEADERDATA set to a objectpointer

   */

  ret = curl_easy_perform (hnd);

  curl_easy_cleanup (hnd);
  hnd = NULL;

  return (int) ret;
}

/**** End of sample code ****/