我已经使用雅虎财经“API”与下面的代码几个星期。因为大约一个星期前,它停止工作。如果你键入这个地址:http://ichart.yahoo.com/table.csv?s=MSFT,您将获得Microsoft的一些历史数据(我的浏览器自动下载)。然而,当我试图通过Java阅读它时,流显然是打开的(我没有得到异常),然而,这个流不包含任何数据。2有人知道为什么下面的缓冲读取器不能像前几周那样流式传输对象吗?我怀疑雅虎可能添加了一些java脚本来阻止自动下载。
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();
6条答案
按热度按时间k5ifujac1#
您可以将URL从“http”更改为“https”,这样就可以正常工作,没有任何问题。
suzh9iv82#
许多网站正在检查用户代理字符串,如果没有发送字符串来阻止自动访问,则阻止访问。
以下是添加用户代理字符串的示例:
inn6fuwd3#
要了解java通信不起作用的原因,请跟踪html通信。我使用Chrome浏览器,启用了HTTP跟踪扩展。跟踪输出显示链接http://ichart.yahoo.com/table.csv?s= ^GSPC重定向到https://ichart.yahoo.com/table.csv?s= ^GSPC。
在Java中,你需要实现一个URL连接来跟随重定向。http://www.mkyong.com/java/java-httpurlconnection-follow-redirect-example/中有一个跟随重定向的例子。通过传递url字符串来修改这个例子,你应该会得到预期的输出。
px9o7tmv4#
1.这是一个从雅虎财经下载历史股票数据的java代码。
1.在这里,我获取了所需的日期参数,并在Calender对象中设置了这些参数,然后将此对象转换为period对象,将此对象传递给函数,在此函数中将其转换为UNIX时间戳,然后将该值附加到链接中
1.我已经创建了一个url对象,它将获得所需的股票代码值的历史数据的csv文件,该值是使用输入流阅读器读取的,并显示在控制台上。
fbcarpbf5#
有雅虎财经图书馆
rvpgvaaj6#
试着从其他网络上执行这段代码,这样你就能清楚雅虎是阻止了自动下载还是只把你正在使用的网络列入黑名单。