Perl当变量由<>设置而不是直接分配时,为什么POST不起作用?

问题描述 投票:1回答:1

当我直接为变量$ connection_name指定名称时,此脚本可以正常工作,但我想获取用户输入并将其分配给变量。当我这样做时,它不起作用。我收到错误400错误请求。

#!/usr/bin/perl
use strict;
use warnings;
use LWP;

my $ua = LWP::UserAgent->new;
my $server_endpoint = "XXXX"

# Get name for connection
print "Connection Name?";
my $connection_name= <>;
print $connection_name;

# HTTP request header fields
my $req = HTTP::Request->new(POST => $server_endpoint);
$req->header('content-type' => 'application/json');

# POST data in the HTTP request body
my $post_data = "{
    \"name\":\"$connection_name\",
    \"origin_country\":\"us\",
    \"datasource_type\":\"cfdcb449-1204-44ba-baa6-9a8a878e6aa7\"
}"
$req->content($post_data);

my $resp = $ua->request($req);
if ($resp->is_success) {
    my $message = $resp->decoded_content;
    print "Received reply: $message\n";
}
else {
    print "HTTP POST error code: ", $resp->code, "\n";
    print "HTTP POST error message: ", $resp->message, "\n";
}
perl post
1个回答
6
投票

当你硬编码$connection_name时,你可能没有像现在这样包含换行符。加

chomp($connection_name);

请使用合适的JSON生成器。

use JSON::XS qw( encode_json );

my $post_data = encode_json({
   name            => $connection_name,
   origin_country  => "us",
   datasource_type => "cfdcb449-1204-44ba-baa6-9a8a878e6aa7",
});
© www.soinside.com 2019 - 2024. All rights reserved.