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

StackOverflow https://stackoverflow.com/questions/241783

  •  04-07-2019
  •  | 
  •  

Вопрос

Я взаимодействую с платежным шлюзом, и мне не повезло с 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',
);

Почему происходит эта ошибка?

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top