我使用https://finance.yahoo.com/quotes/..。用于股票报价和期权数据。在Safari浏览器中查看时,它仍然可以很好地工作。我还将它作为NSURLSession dataTaskWithUrL引入到Objective C应用程序中。上周(大约2017年4月28日),它开始通过调用willPerformHTTPRedirection来强制重定向:但是重定向循环到自己,并生成"too many redirects“错误。
有谁有解决这个问题的办法吗?
发布于 2017-05-07 00:20:04
我发现,雅虎财经将他们的网站地址格式从(4/1) "http://finance.yahoo.com/q/hp?s=AAPL&g=w“改为(4/8) "http://finance.yahoo.com/quote/AAPL/history?interval=1wk”
然后,在4/21,每周历史数据不同地导入,不包括一些广告行之间的股票代码和定价到“日期/开盘...调整关闭”标题以及从日期到成交量的列数。
在5/5,雅虎财经历史数据将不会通过VBA编程打开。其他金融网站,如MSN,Google,Market Watch和Invetopedia继续使用相同的VBA代码打开。
最后,当我将上面列出的较新的Yahoo链接粘贴到电子表格中,然后单击该链接时,网页将重定向到Apple的常规摘要站点,而不是历史数据选项卡。
我将尝试其他几行代码,但在此之后,将考虑更改为Investopedia。
发布于 2017-06-07 02:34:57
这是我最终想出的解决方案:
在原始NSURLRequest中,将其设置为NSURLMutableRequest并添加:
[theRequest setValue:@"Mozilla......." forHTTPHeaderField:@"User-Agent"];这种“欺骗浏览器”的方式通常不需要重定向。但有时会有重定向。因此,我还添加了以下方法:
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task willPerformHTTPRedirection:(NSHTTPURLResponse *)redirectResponse newRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLRequest *))completionHandler{在完成处理程序中,我检查task.currentRequest valueForHTTPHeaderField:,将其设置为不同的浏览器,并使用不同的浏览器生成新的NSURLRequest。它似乎起作用了。
发布于 2017-06-05 23:51:33
基于另外两个人的工作,我似乎有了一个解决这个问题的方法。从Yahoo下载历史数据的问题其实有两个方面:
issue
使我能够继续使用Excel电子表格和相关VBA代码的解决方案基于:
这是丹尼斯·李的作品,他演示了如何提取/
的Tim Hall的作品
https://stackoverflow.com/questions/43723597
复制相似问题