我正在与支付网关接口,并且没有运行Net :: SSLeay及其post_https子程序。支付网关向我发出了必须用于身份验证的客户端证书。 Net :: SSLeay perldoc有以下示例:
($page, $response, %reply_headers)
= post_https('www.bacus.pt', 443, '/foo.cgi', # 3b
make_headers('Authorization' =>
'Basic ' . MIME::Base64::encode("$user:$pass",'')),
make_form(OK => '1', name => 'Sampo'),
$mime_type6, $path_to_crt7, $path_to_key8);
我自己的版本如下,并返回错误 Net :: SSLeay :: post_https 的参数太多:
#!/usr/bin/perl
use strict;
use warnings;
use Net::SSLeay qw(post_https);
my %post = (
#snip
);
my ($page, $response, %reply_headers) = post_https(
'www.example.com',
443,
'/submit',
'',
make_form(%post),
'text/xml',
'/path/to/cert',
'/path/to/key',
);
为什么会出现此错误?
答案 0 :(得分:2)
Net :: SSLeay的新版本没有旧版本的原型。阅读旧版本和新版本的来源我会说原型是一个错误(它调用的代码可以处理比广告更多的变量)。
我建议的解决方案是升级到较新版本的Net :: SSLeay。如果那是不可能的,那么像& post_https一样调用它可能是一个快速但难看的修复。
答案 1 :(得分:1)
文档不正确。在我的副本(Net :: SSLeay 1.04)中,post_https在文档中显示了您引用的示例,但声明最多使用6个参数:
sub post_https ($$$;***) { do_httpx2(POST => 1, @_) }
我还不确定如何让它发挥作用。
编辑:尝试以旧式方式调用post_https,作为使用& post_https(...)的子例程。
答案 2 :(得分:-2)
'/ path / to / key'后面有一个额外的逗号