问题描述
我开始遇到我们的一个 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 有什么问题以及如何传递值,可能是引号等。