【问题标题】:Add information from a CSV file to a URL将 CSV 文件中的信息添加到 URL
【发布时间】:2018-07-13 03:38:50
【问题描述】:

我需要发出多个 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 未找到

但我知道这些 ID 在我的系统中。我应该如何将我的 ID 添加到 URL 以执行多个 PUT 请求?

【问题讨论】:

  • 404 表示您访问的 URI 不存在。尝试使用curl 与它交谈 - 你可以curl -XPUT
  • $uri 正确吗?填充后添加一行以将其打印出来,以便您验证它

标签: xml perl csv


【解决方案1】:

最明显的问题是$uri不会在这个语句中展开

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

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

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

我无法保证这会解决眼前的问题,因为我无法对其进行测试,但似乎很有可能

【讨论】:

  • my $uri = "https://hostname:9060/ers/config/networkdevice/$id" 这是正确的写作方式。 id 没有剪辑
猜你喜欢
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多