这个“问题”要求澄清答案: 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的手册,我想我只是看错了。
同样,第一个例子运作良好,但我真的想更好地理解这一点。
感谢。
答案 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 );