代码之家  ›  专栏  ›  技术社区  ›  cowgod

net::ssleay post_https编译错误:参数太多

  •  2
  • cowgod  · 技术社区  · 16 年前

    我正在与一个支付网关连接,但我对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',
    );
    

    为什么会发生此错误?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Leon Timmermans    16 年前

    新版本的net::ssleay没有旧版本的原型。读到新旧版本的源代码,我会说原型是一个bug(它调用的代码可以处理比广告更多的变量)。

    我推荐的解决方案是升级到新版本的net::ssleay。如果这是不可能的,像&post_https那样称呼它可能是一个快速但丑陋的解决方案。

        2
  •  1
  •   Andru Luvisi    16 年前

    文档不正确。在我的副本(net::ssleay 1.04)中,您引用的示例文档中显示了post-https,但声明最多采用6个参数:

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

    我还不知道该怎么做。

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

        3
  •  -2
  •   The Dark    16 年前

    “/path/to/key”后面还有一个逗号