4

我正在使用适用于 Windows 的 Octave 4.0.0,并希望从对所有公众开放的网页下载股票价格。我使用以下调用:

data = urlread(https://www.netfonds.no/quotes/paperhistory.php?paper=API.A&csv_format=csv)

但是,我收到以下错误消息:

urlread: Peer certificate cannot be authenticated with given CA certificates

我已经在互联网上搜索了这个错误消息,包括 StackOverflow,但不理解那里给出的建议。

Q1:我的电脑有什么不足吗?如果是这样,我该怎么办?
Q2:我可以改变呼叫以适应我的电脑上缺少的东西吗?

在此先感谢您的帮助:)

4

3 回答 3

7

这似乎是urlread()某些版本的 Octave 中的一个错误。对于我正在做的一门课程,我们改变了这个:

responseBody = urlread(submissionUrl, 'post', params);

[code, responseBody] = system(sprintf('echo jsonBody=%s | curl -k -X POST -d @- %s', body, submissionUrl));

于 2016-07-25T04:21:58.117 回答
1

尽管该页面是公开的,但连接是加密的。为了使加密连接有意义,它必须使用您信任的密钥。典型的用户不会考虑是否信任它,它将决定这一点的工作留给操作系统或网络浏览器(然后依赖于证书颁发机构)。我猜这是你的情况。

urlread 您得到的错误是因为您正在访问的网站使用了一个由不“信任”的东西认证的密钥。理想情况下,您将拥有一个可信证书列表,并且所有应用程序都将使用它。如果您的 Web 浏览器信任它,但系统的其余部分不信任它,则说明您存在配置问题。您的 Web 浏览器保留了自己的受信任证书列表,或者 libcurl(urlread使用的库)没有找到安装在您系统上的证书。

此“配置”将是一个包含多个.pem文件的目录。本网站所需的特定证书很可能会命名为GlobalSign_Root_CA_-_R2.pem.

它在这里工作:

octave> data = urlread ("https://www.netfonds.no/quotes/paperhistory.php?paper=API.A&csv_format=csv")
data = quote_date,paper,exch,open,high,low,close,volume,value
20150508,API,Amex,0.39,0.40,0.39,0.40,85933,34194
20150507,API,Amex,0.40,0.41,0.38,0.39,163325,64062
...
于 2015-06-06T14:12:16.577 回答
0

对于 Windows,一种解决方法是在 Windows 控制台中使用 curl 命令。这可以由 Octave 通过系统命令调用。使用 curl 命令,您可以选择“--insecure”选项,该选项也允许连接到没有证书的网站。仅当您确定网站安全时才使用此选项。

sURLLink = 'https://www.netfonds.no/quotes/paperhistory.php?paper=API.A&csv_format=csv'
command=['curl --insecure ','"',sURLLink,'"']; 
[status, output] =system(command);
于 2015-08-02T20:08:05.177 回答