2017-08-03 23 views
1

は、私は上記のコードは常に400エラーを与える次のコード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; 

を試してみました。そして

{"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のカールと同じことが働いています。 Box API documentation says

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

'true'をし、' 'true''は同じことを意味するものではありません。 '[...]'と '{...} 'は互換性がありません。 –

+0

@SinanÜnür '' '' ''と '' '' ''は、LWPを使ってフォームデータを投稿するときにはほとんど互換です。 – melpomene

+0

@melpomene受信側のソフトウェアは、パラメータが指定されている順序を気にしないと仮定しています。おそらく、確かではありませんが、想像を絶するものではありません。 –

答えて

1

は:

リクエストボディデータ及び応答データの両方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://stackoverflow.com/questions/45481851/post-the-data-with-header-in-curl-not-working-in- php/45487040#45487040)をPHPタグに入れましたが、結果は得られませんでした。しかし、それをデコードした後、感謝の意を表します。 – mkHun

関連する問題