Net :: SSLeay post_https error de compilación: Demasiados argumentos
Pregunta
Estoy interactuando con una pasarela de pago y no tengo suerte con Net :: SSLeay y su subrutina post_https. La pasarela de pago me ha emitido un certificado de cliente que debe utilizarse para la autenticación. El perldoc Net :: SSLeay tiene el siguiente ejemplo:
($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);
Mi propia versión está debajo y devuelve el error 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 qué ocurre este error?
Solución
Las nuevas versiones de Net :: SSLeay no tienen el prototipo que tienen las versiones anteriores. Al leer la fuente de la versión anterior y la nueva, diría que el prototipo era un error (el código al que llama puede manejar más variables de las que se anuncian).
La solución que recomiendo es actualizar a una versión más nueva de Net :: SSLeay. Si eso no es posible, llamarlo como & amp; post_https puede ser una solución rápida pero fea.
Otros consejos
La documentación es incorrecta. En mi copia (Net :: SSLeay 1.04) post_https se muestra en la documentación con el ejemplo que usted cita, pero se declara que toma un máximo de 6 argumentos:
sub post_https ($$;***) { do_httpx2(POST => 1, @_) }
Todavía no estoy seguro de cómo hacer que funcione.
Editar: intente llamar post_https a la antigua usanza, como una subrutina usando & amp; post_https (...).
Tienes una coma adicional después de '/ path / to / key'