7

我刚刚在 windows server 和 windows 7 上安装了 perl6。

我想将已经在 openbsd 上运行的脚本移植到 Windows 机器上。

我测试了这段代码:

my $resp = await Cro::HTTP::Client.get('https://www.perl6.org/');

我会在两台 Windows 机器上得到这个:

C:\Users\Matthias\CommaProjects\testing>perl6 cro.pl6
Tried to get the result of a broken Promise
  in block  at C:\rakudo\share\perl6\site\sources\0609EA0BB03C70C2C15DB4B144D704
1C1059D14C (Cro::TLS) line 108

Original exception:
    An operation first awaited:
      in block  at C:\rakudo\share\perl6\site\sources\A4ECA701FE96A8456AEB83692D
6B3C55AAFC964C (IO::Socket::Async::SSL) line 322

    Died with the exception:
        Server certificate verification failed: unable to get local issuer certificate
          in block  at C:\rakudo\share\perl6\site\sources\A4ECA701FE96A8456AEB83
692D6B3C55AAFC964C (IO::Socket::Async::SSL) line 322

有人可以提示如何让它运行吗?

编辑:我还用运行良好的 TLS 测试了 WWW:

use WWW;
say get 'https://httpbin.org/get?foo=42&bar=x', :SomeHeader<Value>;
4

2 回答 2

4

看起来,对 windows 的支持还没有在 cro 中完全实现。但它似乎根据路线图计划在未来的版本中发布。与 windows IO::Path::ChildSecure一起使用时,至少有一个 cro 依赖项也存在问题。

作为目前的解决方法,您可以尝试使用位于当前工作目录中的 curl 项目中的 cacert.pem 以及您的代码

use Cro::HTTP::Client;

#cacert.pem from https://curl.haxx.se/docs/caextract.html
constant %ca := { ca-file => 'cacert.pem' };
my $resp = await Cro::HTTP::Client.get('https://www.perl6.org/', :%ca);
say await $resp.body;
于 2019-11-04T20:18:51.587 回答
2

已经确认对应的库中存在一些Issues。所以我觉得这里的这个Feed可以当作解决了。进一步的讨论将在 lib 的 github 空间进行:

https://github.com/jnthn/p6-io-socket-async-ssl/

非常感谢乔纳森!

于 2019-11-04T12:50:41.377 回答