Могу ли я вызвать функцию Perl LWP Post со строковым параметром - PullRequest
2 голосов
/ 04 августа 2020

У меня проблема с предоставлением списка параметров функции UserAgent Post (с использованием модуля https). Примеры имеют вид:

my $ua = LWP::UserAgent->new();
my $response = $ua->post( $url, { 'param1', 'value1', 'param2', 'value2' } );

API, к которому я хочу получить доступ, принимает параметры с использованием повторяющихся имен ключей, где важен порядок параметров. Например:

https://URL?feature_name='animal'&feature_value='dog'&feature_name='vehicle'&feature_value='boat'

Я не могу передать это в функцию POST как ha sh из-за повторяющихся имен ключей. Можно ли вместо этого передать параметры в виде строки?

1 Ответ

3 голосов
/ 04 августа 2020

LWP::UserAgent поддерживает передачу параметров как ссылку на массив, а не как ha sh ref, поэтому вы можете просто сделать:

my $ua = LWP::UserAgent->new();
my $response = $ua->post( $url, [ 
    'feature_name',  'animal', 
    'feature_value', 'dog',
    'feature_name',  'vehicle', 
    'feature_value', 'boat' 
] );

Другой поддерживаемый вариант - использовать ha sh массива ссылки:

my $response = $ua->post( $url, [ 
    feature_name  => [qw/animal vehicle/],
    feature_value => [qw/dog boat/]
] );

Для получения дополнительных сведений о поддерживаемых параметрах вы можете ознакомиться с документацией HTTP :: Request :: Common в разделе POST, который идет например:

Поля многозначной формы могут быть указаны либо путем повторения имени поля, либо путем передачи значения в качестве ссылки на массив.

...