终端告诉 perl 脚本有问题

问题描述

我开始遇到我们的一个 perl 脚本的问题,该脚本直到上个月都运行良好。有人可以帮我解决这个问题吗?

malformed JSON string,neither array,object,number,string or atom,at character offset 0
(before "<!doctype html><html...") at ad_lib.pm line 985.

下面是我的线路

my $response = from_json(qx{$BASE_HASH{CURL} -X GET -H "Content-Type: application/json" -H "Authorization:Basic $encoded" "https://localhost:9090/nwrestapi/v2/global/protectiongroups/" -k -1 2>/dev/null});

编码如下

    my %BASE_HASH = ();
    read_config(\%BASE_HASH);
    my $encoded = MIME::Base64::encode($BASE_HASH{NW_USER} . ":" . $BASE_HASH{NW_PW});

解决方法

看起来您从 HTTP 请求中获得的响应曾经是一个 JSON 字符串,现在是一个 HTML 文档。

from_json 试图将其解码为 JSON 字符串,但失败了,因为它找到的不是数组、对象、数字、字符串或原子:它是 HTML。

因此,与您使用的 Perl 脚本相比,您的外部服务(您正在与之交谈的服务)更可能出现问题。这也可以解释为什么它突然开始失败。

,

似乎是较新版本的应用程序几乎没有高级版本的 SSL,并且无法解码用户名/密码。我已经将分块/解码的值传递给文件,而不是 $encoded,脚本工作正常。 我在执行脚本时发现新旧版本的唯一区别是 SSL 版本。 在具有旧应用程序版本的系统上:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 在具有新应用程序版本的系统上:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

需要弄清楚 $encoded 有什么问题以及如何传递值,可能是引号等。