Мне нужно отправить запрос HTTP POST
на определенный URL, и мне необходимо указать имя параметра, которое можно интерпретировать как массив - например, так:
parameter[]=123
Однако, неважночто я пытаюсь, LWP всегда экранирует [] символов.
Вот пример кода:
#!/usr/bin/perl
use strict;
use warnings;
use LWP;
use HTTP::Request::Common;
$|=1;
my $ua = LWP::UserAgent->new;
my $post_url = "http://192.168.1.1/something";
my $params = { };
$params->{something} = "abc";
$params->{'array[]'} = 123;
my $response = $ua->request(POST $post_url, [ $params ]);
Представленные данные выглядят так:
POST /something HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: 192.168.1.1
User-Agent: libwww-perl/5.835
Content-Length: 29
Content-Type: application/x-www-form-urlencoded
array%5B%5D=123&something=abc
И мне нужноэто будет выглядеть так:
POST /something HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: 192.168.1.1
User-Agent: libwww-perl/5.835
Content-Length: 25
Content-Type: application/x-www-form-urlencoded
array[]=123&something=abc
Я не имею никакого контроля над удаленным приложением и не могу на что-либо повлиять, я просто должен указать один такой параметр (как параметр массива, который на самом деле не't), и мне нужно найти способ сделать это, не используя Perl без экранирующих символов в скобках.
Я пытался определить 'array'
как array
и arrayref
(и многие другие),но LWP, похоже, не понимает концепцию параметров массива, даже если у меня есть несколько значений для этого параметра, все они будут отправлены с одинаковым именем параметра (?array=123&array=456&array=789
) - так что это тоже не сработает.
В основном мне интересно, могу ли якаким-то образом (если не считать изменения в модулях исходного кода) мешать LWP автоматически экранировать эти символы при выполнении запроса POST.
Спасибо.