如何使用 LWP::UserAgent 在 BOX API 中发出发布请求?



我尝试了以下代码

my $url = "https://api.box.com/2.0/users/";
use strict;
use warnings;
use LWP::UserAgent; 
use HTTP::Request::Common qw{ POST };
use CGI;
my $ua      = LWP::UserAgent->new();
my $request = POST( $url, [ 'name' => 'mkhun', 'is_platform_access_only' => 'true',"Authorization" => "Bearer <ACC TOK>" ] );
my $content = $ua->request($request)->as_string();
my $cgi = CGI->new();
print $cgi->header(), $content;

上面的代码总是给出 400 错误。并扔

{"type":"error","status":400,"code":"bad_request","context_info":{"errors":[{"reason":"invalid_parameter","name":"entity-body","message":"Invalid value 'is_platform_access_only=true&Authorization=Bearer+WcpZasitJWVDQ87Vs1OB9dQedRVyOrs6&name=mkhun'. Entity body should be a correctly nested resource attribute name/value pair"}]},

我不知道是什么问题。Linux curl 的同样事情也在起作用。

curl https://api.box.com/2.0/users 
-H "Authorization: Bearer <TOKEN>" 
-d '{"name": "Ned Stark", "is_platform_access_only": true}' 
-X POST

Box API 文档说:

请求正文数据和响应数据的格式均为 JSON。

您的代码正在发送表单编码的数据。

此外,看起来Authorization应该是HTTP标头,而不是表单字段。

试试这个:

use strict;
use warnings;
use LWP::UserAgent;
use JSON::PP;
my $url = "https://api.box.com/2.0/users/";
my $payload = {
name => 'mkhun',
is_platform_access_only => 1,
};
my $ua = LWP::UserAgent->new;
my $response = $ua->post(
$url,
Authorization => 'Bearer <TOKEN>',
Content => encode_json($payload),
);

最新更新