如何使用Perl和LWP发布非键/值对数据

时间:2013-05-28 19:28:35

标签: json perl http-post lwp

这个“问题”要求澄清答案: How can I make a JSON POST request with LWP?

我没有评论答案的声誉,并认为将我的问题作为答案发布是不合适的。

具体来说,我试图发布JSON数据(就像其他提问者一样)而不是键值对。

为什么这样做:

my $lwp = LWP::UserAgent->new;

my $req = HTTP::Request->new( 'POST', $uri );
$req->header( 'Content-Type' => 'application/json' );
$req->content( $json );

my $response = $lwp->request( $req );

但这不是:

my $req= POST( $uri, $json);  ### this works for key/value pairs
$req->header( 'Content-Type' => 'application/json' );
my $response = $lwp->request( $req);

......而且这两者都没有:

my $response = $lwp->request(POST $uri, ['Content-Type' => 'application/json'], $json);

我已阅读HTTP :: Request :: Common和LWP :: Useragent的手册,我想我只是看错了。

同样,第一个例子运作良好,但我真的想更好地理解这一点。

感谢。

2 个答案:

答案 0 :(得分:5)

为什么要起作用?来自docs

POST $url
POST $url, Header => Value,...
POST $url, $form_ref, Header => Value,...
POST $url, Header => Value,..., Content => $form_ref
POST $url, Header => Value,..., Content => $content

你想要

POST($uri, Content => $json)

答案 1 :(得分:1)

除非这是一个更大的应用程序的一部分(可能还是如此),我可能会建议使用Mojo::UserAgent,它有非常简单的工具来做这些事情。

use strict;
use warnings;

use Mojo::UserAgent;

my $ua = Mojo::UserAgent->new;
$ua->post( $uri, json => $json );