Передать аргументы Perl-файла в LWP HTTP-запрос

Вот моя проблема с обработкой аргумента Perl. Мне нужно передать аргумент аргумента Perl в http-запрос (Webservice) независимо от аргумента, переданного в файл perl.

perl wsgrep.pl  -name=john -weight -employeeid -cardtype=physical

В файле wsgrep.pl мне нужно передать вышеупомянутые аргументы в http post params.

как ниже,

http://example.com/query?name=john&weight&employeeid&cardtype=physical. 

Я использую пакет LWP для этого URL, чтобы получить ответ.

Есть ли хороший подход для этого?

Обновлено: внутри wsgrep.pl

my ( %args, %config );

my $ws_url =
"http://example.com/query";

my $browser  = LWP::UserAgent->new;
# Currently i have hard-coded the post param arguments. But it should dynamic based on the file arguments. 
my $response = $browser->post(
    $ws_url,
    [
        'name' => 'john',
        'cardtype'  => 'physical'
    ],
);

if ( $response->is_success ) {
    print $response->content;
}
else {
    print "Failed to query webservice";
    return 0;
}

Мне нужно построить часть параметра post из заданных аргументов.

[
            'name' => 'john',
            'cardtype'  => 'physical'
        ],

1 ответ

Решение

Обычно для URL-кодирования параметров я бы использовал следующее:

use URI;

my $url = URI->new('http://example.com/query');
$url->query_form(%params);

say $url;

Ваши потребности более сложны.

use URI         qw( );
use URI::Escape qw( uri_escape );

my $url = URI->new('http://example.com/query');

my @escaped_args;
for (@ARGV) {
   my ($arg) = /^-(.*)/s
      or die("usage");

   push @escaped_args,
      join '=',
         map uri_escape($_),
            split /=/, $arg, 2;
}

$url->query(@escaped_args ? join('&', @escaped_args) : undef);

say $url;
Другие вопросы по тегам