一尘不染

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

json

如果尝试登录https://orbit.theplanet.com/Login.aspx?url=/Default.aspx(使用任何用户名/密码组合),则可以看到登录凭据以非传统集的形式发送POST数据:仅一个寂寞的JSON字符串,没有正常的key
= value对。

具体来说,代替:

username=foo&password=bar

甚至类似:

json={"username":"foo","password":"bar"}

简单来说就是:

{"username":"foo","password":"bar"}

是否可以使用LWP或替代模块执行此类请求?我愿意这样做,IO::Socket但希望有更高层次的东西(如果有)。


阅读 301

收藏
2020-07-27

共1个答案

一尘不染

您需要手动构造HTTP请求,并将其传递给LWP。应该执行以下操作:

my $uri = 'https://orbit.theplanet.com/Login.aspx?url=/Default.aspx';
my $json = '{"username":"foo","password":"bar"}';
my $req = HTTP::Request->new( 'POST', $uri );
$req->header( 'Content-Type' => 'application/json' );
$req->content( $json );

然后,您可以使用LWP执行请求:

my $lwp = LWP::UserAgent->new;
$lwp->request( $req );
2020-07-27