Pergunta

Estou interface com um gateway de pagamento e não tendo nenhuma sorte com Net :: SSLeay e sua post_https sub-rotina. O gateway de pagamento me emitido um certificado de cliente que deve ser usado para autenticação. O perldoc Net :: SSLeay tem o exemplo a seguir:

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

A minha versão é abaixo e retorna o erro Demasiados argumentos para 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',
);

Por que está ocorrendo este erro?

Foi útil?

Solução

Novas versões do Net :: SSLeay não têm o protótipo que versões antigas têm. Lendo a fonte da versão antiga e nova Eu diria que o protótipo era um bug (o código que chama pode lidar com mais variáveis ??do que o anunciado).

A solução que eu recomendo é a atualização para uma versão mais recente do Net :: SSLeay. Se isso não for possível, chamando-a como & post_https pode ser uma solução rápida, mas feio.

Outras dicas

A documentação está incorreta. Em minha cópia (Net :: SSLeay 1,04) post_https é mostrado na documentação com o exemplo que você cita, mas é declarado para ter um máximo de 6 argumentos:

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

Eu não tenho ainda certeza de como fazê-lo funcionar.

Edit:. Tente chamar post_https à moda antiga, como uma sub-rotina usando & post_https (...)

Você tem uma vírgula extra após '/ path / to / key'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top