Ошибка компиляции Net :: SSLeay post_https: слишком много аргументов - PullRequest
2 голосов
/ 28 октября 2008

Я взаимодействую с платежным шлюзом и мне не везет с Net :: SSLeay и его подпрограммой post_https. Платежный шлюз выдал мне сертификат клиента, который должен использоваться для аутентификации. Perldoc Net :: SSLeay имеет следующий пример:

($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 ]

2 голосов
/ 28 октября 2008

Новые версии Net :: SSLeay не имеют прототипа, который есть у старых версий. Читая источник старой и новой версии, я бы сказал, что прототип был ошибкой (код, который он вызывает, может обрабатывать больше переменных, чем объявлено).

Решением, которое я рекомендую, является обновление до более новой версии Net :: SSLeay. Если это невозможно, назвать его как & post_https можно быстро, но безобразно.

1 голос
/ 28 октября 2008

Документация неверна. В моем экземпляре (Net :: SSLeay 1.04) post_https показан в документации с примером, который вы приводите, но объявлено, что он принимает максимум 6 аргументов:

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

Я пока не уверен, как заставить это работать.

Редактировать: Попробуйте вызвать post_https старомодным способом, как подпрограмму, используя & post_https (...).

0 голосов
/ 28 октября 2008

У вас есть лишняя запятая после '/ path / to / key'

...