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

Jab*_*key 1 perl post

当我直接为变量$ 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";
}
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 6

当您硬编码时$connection_name,您可能不像现在那样包含换行符.加

chomp($connection_name);
Run Code Online (Sandbox Code Playgroud)

请使用合适的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",
});
Run Code Online (Sandbox Code Playgroud)