我需要发出多个HTTP PUT请求。
我有一个XML模板,以及一个包含我设备ID,名称和IP的CSV文件。 (我想在我的系统中更改名称或IP)。
设备在我的CSV数据中具有完全相同的ID。
123,test1, 10.56.22.1
124,test2, 10.56.2
use strict;
use warnings;
use XML::Twig;
use LWP::UserAgent;
use HTTP::Headers;
use HTTP::Request;
use File::Slurp;
use JSON -support_by_pp;
use LWP 5.64;
use MIME::Base64;
use IO::Socket::SSL;
use File::Slurp;
# Create a user agent object
my $ua = LWP::UserAgent->new( ssl_opts => {
SSL_verify_mode => SSL_VERIFY_NONE(),
verify_hostname => 0,
} );
my $xml = XML::Twig->new->parsefile ('iemplate.xml');
$xml->set_pretty_print('indented_a');
open ( my $input, '<', 'input.csv' ) or die $!;
while ( <$input> ) {
chomp;
my ($id, $name, $ip) = split /,/;
$xml->root->set_att('name', $name);
$xml->get_xpath('//ipaddress', 0)->set_text($ip);
my $uri = 'https://hostname:9060/ers/config/networkdevice/($id)';
my $req = HTTP::Request->new('PUT', $uri, [
Accept => 'application/vnd.com.cisco.ise.network.networkdevice.1.1+xml',
Content_Type => 'application/vnd.com.cisco.ise.network.networkdevice.1.1+xml;charset=utf-8'
],
$xml->sprint
);
$req->content($xml->sprint);
$req->authorization_basic("user", "user");
# Pass request to the user agent and get a response back
my $res = $ua->request($req);
# Check the outcome of the response
if ($res->is_success) {
print $res->status_line, "n";
}
else {
print $res->status_line, "n";
}
}
我收到此错误:
404 Not Found
但我知道这些ID在我的系统中。如何将我的ID添加到URL以执行多个PUT请求?
答案 0 :(得分:1)
最明显的问题是$uri
在本声明中不会被扩展
my $uri = 'https://hostname:9060/ers/config/networkdevice/($id)'
字符串中没有嵌入的双引号,因此使用它们作为分隔符没有问题,将插入标量
my $uri = "https://hostname:9060/ers/config/networkdevice/($id)"
我不能保证这会解决眼前的问题,因为我无法测试它,但似乎很可能