如何使用LWP :: UserAgent在BOX API中发布发布请求?
问题描述:
我曾尝试下面的代码如何使用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
答
两个请求体数据和响应数据被格式化为JSON。
您的代码改为发送form-encoded data。
此外,它看起来像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),
);
+0
谢谢。从很长一段时间我都在努力。其实,我想用PHP的解决方案,所以我升起了相同的[问题](https://*.com/questions/45481851/post-the-data-with-header-in-curl-not-working-in- php/45487040#45487040)在PHP标记,但我没有得到结果。但解码后,它的工作表示感谢。 – mkHun
TRUE;和''true''并不意味着同样的事情。 ''和'{...}'是不可互换的。 –
@SinanÜnür''''和'{''}'在用LWP发布表单数据时大多可以互换。 – melpomene
@melpomene您假设接收方的软件不关心参数指定的顺序。不太可能,当然,但不是不可想象的。 –