如何使用HTTP请求发布内容(Perl)

时间:2012-06-29 15:19:45

标签: perl http lwp

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->内容发送多条内容? $ req->内容期望什么样的数据?

它只发送最后一个。

编辑:

如果我将其格式化为'port = 8& target = 64',则可以找到它。还有更好的方法吗?

3 个答案:

答案 0 :(得分:14)

my $ua      = LWP::UserAgent->new(); 
my $request = POST( $url, [ 'port' => 8, 'target' => 64 ] ); 
my $content = $ua->request($request)->as_string(); 

答案 1 :(得分:3)

给出的答案对我不起作用。我仍然遇到与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();

答案 2 :(得分:1)

一起使用 LWP::UserAgent 和 HTTP::Request 因为它也很常见,如果不是更频繁的做法,我有点困惑,除了 json 之外,SO 几乎没有讨论标准的 POST 和 GET / 请求绝大多数使用。

发布

    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);

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

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

有一个类似的问题,但只是关于 LWP 和 Json,但它可能只能通过同时使用 LWP 和 HTTP::Request 来完成,正如该问题选择的答案所建议的那样,并且缺少 POST 和 GET 但可能不是很明显

How can I make a JSON POST request with LWP?

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