2008-10-28 56 views
2

我与支付网关接口,并没有与Net :: SSLeay及其post_https子例程有任何运气。支付网关向我发放了必须用于认证的客户端证书。净:: SSLeay的的perldoc有下面的例子:Net :: SSLeay post_https编译错误:太多的参数

($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); 

我自己的版本低于并返回错误净:: 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', 
); 

为什么发生此错误?

回答

2

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

我推荐的解决方案是升级到更新版本的Net :: SSLeay。如果这是不可能的,那么称它为& post_https可能是一个快速但难看的修复。

1

该文档不正确。在我的副本(净:: SSLeay的1.04)post_https与你举的例子中的文档中显示,但被声明为最多6个参数:

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

我还不知道如何使这行得通。

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

-2

你有后多余的逗号“/路径/到/钥匙”

+0

这在Perl中是完全可以接受的,被认为是很好的风格。 – 2008-10-28 00:18:08

+0

亚里士多德是正确的。额外的逗号在那里,以便您可以轻松地重新排列列表项,如Perl最佳实践中所述: http://www.amazon.com/Perl-Best-Practices-Damian-Conway/dp/0596001738 – cowgod 2008-10-28 05:17:49