关于url:Yahoo Finance API Java下载CSV

Yahoo Finance API Java Download CSV

我已经用雅虎财务"api"和下面的代码几个星期了。大约一周前,它就停止工作了。如果您键入以下地址:http://ichart.yahoo.com/table.csv?S=MSFT,你会得到一些微软的历史数据(我的浏览器会自动下载)。但是,当我试图通过Java读取它时,流显然是打开的(我没有异常),但是,流中没有数据。有人知道为什么下面的缓冲阅读器不能像前几周那样传输对象吗?我怀疑雅虎可能会添加一些Java脚本来阻止自动下载。

1
2
3
4
5
6
7
8
9
10
11
URL url = new URL("http://ichart.yahoo.com/table.csv?s=" + symbol);
URLConnection hc = url.openConnection();
hc.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 4.10; rv:52.0) Gecko/20100101 Firefox/52.0");
BufferedReader in = new BufferedReader(new InputStreamReader(hc.getInputStream()));
    br.readLine();
    //Read File Line By Line
    String strLine;
    while ((strLine = br.readLine()) != null) {
        System.out.println(strLine);
    }
    br.close();


您可以将URL从"http"更改为"https",它可以毫无问题地工作。


要理解Java通信不起作用的原因,请跟踪HTML通信。我使用了Chrome浏览器,启用了HTTP跟踪扩展。跟踪输出显示http://ichart.yahoo.com/table.csv?S=^GSPC重定向到https://ichart.yahoo.com/table.csv?S=^GSPC。

在爪哇中,需要实现URL连接以遵循重定向。跟随重定向的一个例子是http://www. Mkyun.com /java/javahttpLink后续重定向示例/。通过传递URL字符串修改示例,您应该得到预期的输出。


许多网站正在检查用户代理字符串,如果没有发送字符串来阻止自动访问,则会阻止访问。

下面是如何添加用户代理字符串的示例:

1
2
3
    URL url = new URL("http://ichart.yahoo.com/table.csv?s=MSFT");
    URLConnection hc = url.openConnection();
    hc.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 4.10; rv:52.0) Gecko/20100101 Firefox/52.0");


尝试从其他网络执行此代码。这将使你清楚地知道雅虎是阻止了自动下载,还是只将你正在使用的网络列入黑名单。