2008-10-28 6 views
2

Je suis en interface avec une passerelle de paiement et ne pas avoir de chance avec Net :: SSLeay et sa sous-routine post_https. La passerelle de paiement m'a délivré un certificat client qui doit être utilisé pour l'authentification. Le Net :: SSLeay perldoc a l'exemple suivant:Net :: SSLeay post_https erreur de compilation: Trop d'arguments

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

Ma propre version ci-dessous et renvoie l'erreur Trop d'arguments pour 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', 
); 

Pourquoi cette erreur se produit?

Répondre

2

Les nouvelles versions de Net :: SSLeay ne pas le prototype que les anciennes versions ont. En lisant la source de l'ancienne et de la nouvelle version, je dirais que le prototype était un bug (le code qu'il appelle peut gérer plus de variables que la publicité).

La solution que je recommande est mise à niveau vers une version plus récente de Net :: SSLeay. Si ce n'est pas possible, l'appeler comme & post_https peut être une solution rapide mais laide.

+0

Mise à niveau vers une version plus récente de Net :: SSLeay a effectivement résolu le problème. Merci! – cowgod

1

La documentation est incorrecte. Dans ma copie (Net :: SSLeay 1,04) post_https est indiqué dans la documentation avec l'exemple que vous citez, mais est déclaré prendre un maximum de 6 arguments:

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

Je ne suis pas encore sûr de savoir comment faire ça marche. Editer: Essayez d'appeler post_https à l'ancienne, en tant que sous-programme en utilisant & post_https (...).

-2

Vous avez une virgule supplémentaire après '/ path/to/clé'

+0

C'est parfaitement acceptable en Perl et est considéré comme un bon style. –

+0

Aristote est correct. La virgule supplémentaire est là pour que vous puissiez facilement réorganiser les éléments de liste comme indiqué dans Perl Best Practices: http://www.amazon.com/Perl-Best-Practices-Damian-Conway/dp/0596001738 – cowgod

Questions connexes