urlread(),urlwrite()不适用于Octave for Windows中的https页面

时间:2014-10-07 14:06:41

标签: curl octave

当我在Cygwin中使用Octave 3.8.1时,我可以成功下载这样的https页面:

urlwrite('https://www.google.com', 'downloaded.html')

但是,当我使用安装在Windows 7 SP1 Pro 64bit中的Octave 3.6.4时,urlwrite()不起作用:

octave-3.6.4.exe:18> urlwrite('https://www.google.com', 'downloaded.html')
error: urlwrite: curl: Problem with the SSL CA cert (path? access rights?)

urlread()有同样的问题。 有没有一种避免这种错误的好方法?

更新

按照Andy的建议,我试图解决与卷曲相关的问题。目前,curl.exe可以用于https,但libcurl(我认为嵌入八度)不适用于https。让我解释一下我做了什么。

我从here下载了curl.exe。起初,它不适用于这样的https:

C:\somewhere\curl-7.33.0-win64-nossl>curl https://www.google.com/
curl: (1) Protocol https not supported or disabled in libcurl

here下载“cacert.pem”后,将其重命名为“curl-ca-bundle.crt”,并将其放在C:\ windows \ system32中,curl.exe可以从https中提取页面位点。

然而,当我在Octave中使用urlwrite()时,它仍然无效。我想这个octave内部调用libcurl API,但我不知道如何强制libcurl来查找CA证书。

2 个答案:

答案 0 :(得分:2)

我在Octave 4.0.0 for Windows中使用urlread()进行相同的探测。我尝试了一些但没有用的东西。我确实设法让curl命令行工具工作。所以最后对我来说最简单的事就是编写自己的urlread(),使用Octave的system()函数调用curl:

function retval=my_urlread(url) command=['curl --silent ','"',url,'"']; [output,text]=system(command); retval=text; endfunction

答案 1 :(得分:1)

我分析了CURL的源代码,可以说:没有源代码编辑就无法解决这个问题。 CURL有两个入口点:如果你运行curl.exe,它会设置带有环境变量的libcurl和来自工作目录的文件,如果你通过libcurl.dll(如Octave)中的curl_easy_perform使用libcurl,你必须手动提供所有设置。因此,您可以这样设置您的环境,来自Octave的二进制目录的curl.exe将加载数据而无需其他参数(curl.exe https://google.com),但Octave的urlread将无效。