Я пытаюсь обновить простую подпрограмму Perl, которая позволяет нашей программе подключаться к серверам правительства Бразилии для загрузки счетов.Сегодня он работает нормально, как показано ниже:
use WWW::Curl::Easy;
my $curl = WWW::Curl::Easy->new;
my $response_body;
my @param = ('Content-Type: application/soap+xml; charset=utf-8', "SOAPAction: '$action''");
$curl->setopt(CURLOPT_URL, "$urlsefaz"); # one of Brazil's SEFAZ URLs
$curl->setopt(CURLOPT_PORT , 443);
$curl->setopt(CURLOPT_VERBOSE, 0);
$curl->setopt(CURLOPT_HEADER, 1);
$curl->setopt(CURLOPT_SSLVERSION, 3);
$curl->setopt(CURLOPT_SSL_VERIFYHOST, 0);
$curl->setopt(CURLOPT_SSL_VERIFYPEER, 0);
$curl->setopt(CURLOPT_SSLCERT, "$certificate");
$curl->setopt(CURLOPT_SSLKEY, "$privateKey");
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, $data);
$curl->setopt(CURLOPT_HTTPHEADER, \@param);
$curl->setopt(CURLOPT_WRITEDATA,\$response_body);
my $responsexml = $curl->perform;
Однако правительство Бразилии обновило свою политику безопасности, и при следующем обновлении они больше не будут принимать соединения SSLv3, а вместо этого принимает только TLS 1.2, что вызываетмои текущие попытки соединения с новыми тестовыми серверами завершаются неудачей.
Согласно Документации MetaCPAN для WWW :: Curl , которая включает в себя пример для WWW :: Curl :: Easy, методsetopt
должен принимать "большинство" libcurl
параметров.Я верю, что он принимает CURLOPT_SSLVERSION
правильно, но вместо того, чтобы взять одну из констант, описанных в документации CURLOPT_SSLVERSION , программист, который сделал этот бит кода, решил сообщить эквивалентное значение одной из опций (предположительно SSLv3) вместо этого?
Итак, я понятия не имею, какое значение я должен передать CURLOPT_SSLVERSION
, чтобы сообщить этому модулю о работе с TLS 1.2, или как вместо этого сообщить правильную константу.Или есть другой аргумент setopt
, который я мог бы установить для его работы с TLS 1.2?
Кроме того, если нет обходного пути, я подумываю о создании новой функции с нуля вокруг другой библиотеки - возможно, LWP::UserAgent
?Будет ли это лучший путь?Существуют ли другие библиотеки, более подходящие для этого?
Спасибо за любые мысли заранее.