当我在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证书。
答案 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
将无效。