我正在与支付网关连接,并且没有运行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',
);

为什么会出现此错误?

有帮助吗?

解决方案

Net :: SSLeay的新版本没有旧版本的原型。阅读旧版本和新版本的来源我会说原型是一个错误(它调用的代码可以处理比广告更多的变量)。

我建议的解决方案是升级到较新版本的Net :: SSLeay。如果那是不可能的,那么像& post_https一样调用它可能是一个快速但难看的修复。

其他提示

文档不正确。在我的副本(Net :: SSLeay 1.04)中,post_https在文档中显示了您引用的示例,但声明最多使用6个参数:

sub post_https ($$;***) { do_httpx2(POST => 1, @_) }

我还不确定如何让它发挥作用。

编辑:尝试以旧式方式调用post_https,作为使用& post_https(...)的子例程。

'/ path / to / key'后面有一个额外的逗号

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top