将CSV文件中的信息添加到URL

时间:2018-02-02 15:36:14

标签: xml perl csv

我需要发出多个HTTP PUT请求。

我有一个XML模板,以及一个包含我设备ID,名称和IP的CSV文件。 (我想在我的系统中更改名称或IP)。

设备在我的CSV数据中具有完全相同的ID。

Input.csv(id,name,ip)

123,test1, 10.56.22.1
124,test2, 10.56.2

我的Perl脚本

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请求?

1 个答案:

答案 0 :(得分:1)

最明显的问题是$uri在本声明中不会被扩展

my $uri = 'https://hostname:9060/ers/config/networkdevice/($id)'

字符串中没有嵌入的双引号,因此使用它们作为分隔符没有问题,插入标量

my $uri = "https://hostname:9060/ers/config/networkdevice/($id)"

我不能保证这会解决眼前的问题,因为我无法测试它,但似乎很可能