12
use LWP::UserAgent;
use Data::Dumper;

my $ua = new LWP::UserAgent;
$ua->agent("AgentName/0.1 " . $ua->agent);
my $req = new HTTP::Request POST => 'http://example.com';
$req->content('port=8', 'target=64'); #problem
my $res = $ua->request($req);

print Dumper($res->content);

如何使用 $req->content 发送多条内容?$req->content 期望什么样的数据?

它只发送最后一个。

编辑:

发现如果我将它格式化为 'port=8&target=64' 它可以工作。有没有更好的办法?

4

3 回答 3

15
my $ua      = LWP::UserAgent->new(); 
my $request = POST( $url, [ 'port' => 8, 'target' => 64 ] ); 
my $content = $ua->request($request)->as_string(); 
于 2012-06-29T15:23:11.343 回答
4

给出的答案对我不起作用。我仍然遇到与OP相同的问题。

LWP::UserAgent的文档需要哈希或数组引用。

这有效:

my $url = 'https://www.google.com/recaptcha/api/siteverify';
my $ua      = LWP::UserAgent->new(); 

my %form;
$form{'secret'}='xxxxxxxxxxxxxxxxxxxxxxx';
$form{'response'}=$captchaResponse;

my $response = $ua->post( $url, \%form ); 
my $content = $response->as_string();
于 2015-12-12T18:34:54.070 回答
2

一起使用 LWP::UserAgent 和 HTTP::Request 因为它也很常见,如果不是更频繁的练习,我对标准的 POST 和 GET / request 几乎没有在 SO 除了 json 之外讨论过,因为它们非常广泛多数使用。

邮政

    my $ua  = LWP::UserAgent->new();
    my $req = new HTTP::Request( 
       'POST' => "http://url/path", 
       ['Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'],
       'par1=par1value&par2=par2value'
    );
    $ua->request($req);

同样对于 GET

    my $ua  = LWP::UserAgent->new();
    my $req = new HTTP::Request( 
       'GET' => "http://url/path", 
       ['Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'],
       'par1=par1value&par2=par2value' # or I presume attaching the query string directly to the url
    );
    $ua->request($req);

另一种格式形式,其中前两个参数(方法和url)没有融合成一个,不像前面那样,而是分开

my $request = HTTP::Request->new( 'POST', $url, [ parameter1 => 'parameter1Value' ] );
request->header( 'Content-Type' => 'application/json' )

有一个类似的问题,但只考虑 LWP 和 Json,但它可能只能通过使用 LWP 和 HTTP::Request 来完成已经很明显了

如何使用 LWP 发出 JSON POST 请求?

注意:我也特别发布了这个,因为即使在文档 https://metacpan.org/pod/HTTP::Request中也没有提到 POST/GET 的具体/简洁用法

于 2021-03-16T09:33:20.313 回答