2

我正在与支付网关交互,但对 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',
);

为什么会出现这个错误?

4

3 回答 3

2

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

我推荐的解决方案是升级到较新版本的 Net::SSLeay。如果这不可能,那么将其称为 &post_https 可能是一个快速但丑陋的解决方案。

于 2008-10-28T00:33:03.923 回答
1

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

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

我还不确定如何使它工作。

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

于 2008-10-28T00:10:26.653 回答
-2

'/path/to/key' 后面多了一个逗号

于 2008-10-28T00:11:11.253 回答