我需要向某个URL提交HTTP POST
请求,我需要指定一个可以解释为数组的参数名称 - 如下所示:
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
我无法控制远程应用程序并且不能影响任何东西,我只需要像这样指定一个参数(作为数组的参数,它实际上不是),我需要找到一种方法这样做,没有Perl转义括号字符。
我尝试将'array'
定义为array
和arrayref
(以及许多其他内容),但LWP似乎并不理解数组参数的概念,即使我有多个值对于此参数,它们都将使用相同的参数名称(?array=123&array=456&array=789
)提交 - 因此也不会有效。
大多数情况下,我想知道我是否能以某种方式(不修改模块源)阻止LWP在发出POST请求时自动转义这些字符。
感谢。
答案 0 :(得分:2)
您正在发送内容为form-urlencoded的邮件。尝试首先创建一个未编码的请求:
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(POST => 'http://192.168.1.1/something');
$req->content('array[]=123&something=abc');
my $res = $ua->request($req);
答案 1 :(得分:1)
$URI::Escape::escapes
中详述的{{1}}的覆盖部分也应该适用于此。
答案 2 :(得分:0)
覆盖从HTTP :: Request :: Common :: POST。
调用的方法URI::_query::query_form