Curl urlread(),urlwrite()don';不适用于Windows八度音阶的https页面

Curl urlread(),urlwrite()don';不适用于Windows八度音阶的https页面,curl,octave,Curl,Octave,当我使用Cygwin中安装的Octave 3.8.1时,我可以成功下载如下https页面: urlwrite('https://www.google.com', 'downloaded.html') C:\somewhere\curl-7.33.0-win64-nossl>curl https://www.google.com/ curl: (1) Protocol https not supported or disabled in libcurl 但是,当我使用安装在Windows

当我使用Cygwin中安装的Octave 3.8.1时,我可以成功下载如下https页面:

urlwrite('https://www.google.com', 'downloaded.html')
C:\somewhere\curl-7.33.0-win64-nossl>curl https://www.google.com/
curl: (1) Protocol https not supported or disabled in libcurl
但是,当我使用安装在Windows 7 SP1 Pro 64位中的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()也有同样的问题。 有没有避免这个错误的好方法

更新:

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

我从下载了curl.exe。首先,它对https不起作用,如下所示:

urlwrite('https://www.google.com', 'downloaded.html')
C:\somewhere\curl-7.33.0-win64-nossl>curl https://www.google.com/
curl: (1) Protocol https not supported or disabled in libcurl
在我从下载“cacert.pem”后,将其重命名为“curl ca bundle.crt”,并将其放在C:\windows\system32中,curl.exe可以从https站点提取页面


然而,当我在八度音阶中使用urlwrite()时,它仍然不起作用。我猜octave在内部调用了libcurl API,但我不知道如何强制libcurl查找CA证书。

我在octave 4.0.0 for Windows中使用urlread()时遇到了同样的问题。我试过几件事,但都不管用。我确实设法使curl命令行工具能够正常工作。最后,对我来说最简单的事情就是编写我自己的urlread(),它使用Octave的system()函数调用curl:

函数retval=my_urlread(url)
command=['curl--silent','''',url'''];
[输出,文本]=系统(命令);
retval=文本;

endfunction

我分析了CURL的源代码,可以说:没有源代码编辑,您无法解决这个问题。CURL有两个入口点:如果您使用环境变量和工作目录中的文件运行CURL.exe it setup libcurl,如果您通过CURL\u easy\u perform from libcurl.dll(如Octave)使用libcurl,则必须手动提供所有设置。因此,您可以这样设置您的环境:Octave的binary dir中的curl.exe将加载数据,而无需附加参数(
curl.exe)https://google.com)
,但Octave的
urlread
无法工作。

为什么安装了3.6.4以及哪个版本?明格。Visualc女士,Cygwin?对于64位Windows 7,我建议使用非官方的MXE版本。我在中单击了一个链接“Octave 3.6.4 for Windows Microsoft Visual Studio”。我认为3.6.4是Windows的最新官方版本。我尝试了非正式的MXE build 3.8.2-3 portable,但得到了相同的结果。您使用的是https,您安装了CA证书吗?看这里,这里还有一个线程如何做到这一点:不幸的是,它仍然不工作。我编辑了这个问题来描述我做了什么。你能在代码中包含一个描述吗?这将改进你的答案。