【发布时间】:2020-04-18 15:43:54
【问题描述】:
我正在尝试访问 Edimax 智能插头 SP-2101W V2 的 smartplug.cgi 以使用电流和功率值。不幸的是,输出是(像)XML,我不熟悉。
我得到的 Edimax 的输出只有一行:
<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><NOW_POWER><Device.System.Power.NowCurrent>0.7988</Device.System.Power.NowCurrent><Device.System.Power.NowPower>152.06</Device.System.Power.NowPower></NOW_POWER></CMD></SMARTPLUG>
我想要的只是这样的输出:
电流:0.7988A
功率:152.06W
最后,我请求一些支持,以便在加载 xml 内容后使用XML::LibXML 对解析器进行编码。
到目前为止我的脏 perl 代码:
#!/usr/bin/perl
#
# curl --digest -s -X POST -d '<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><NOW_POWER><Device.System.Power.NowCurrent></Device.System.Power.NowCurrent><Device.System.Power.NowPower></Device.System.Power.NowPower></NOW_POWER></CMD></SMARTPLUG>' http://admin:XXXXXXXX@10.100.100.46:10000/smartplug.cgi
#
use strict;
use warnings;
use Capture::Tiny ':all';
use XML::LibXML;
my ($ip, $password) = @ARGV;
my $username = "admin";
my $command_get_power = "curl --digest -s -X POST -d '<?xml version=\"1.0\" encoding=\"UTF8\"?><SMARTPLUG id=\"edimax\"><CMD id=\"get\"><NOW_POWER><Device.System.Power.NowCurrent></Device.System.Power.NowCurrent><Device.System.Power.NowPower></Device.System.Power.NowPower></NOW_POWER></CMD></SMARTPLUG>'";
my $url = " http://admin:" . $password . "@" . $ip . ":10000/smartplug.cgi";
my $exec_cmd = $command_get_power . $url;
my ($stdout, $stderr, $exit) = capture {
system($exec_cmd);
};
print $stdout;
my $xml_data = XML::LibXML->load_xml(string=>$stdout);
【问题讨论】: