2

スクリプトPOSTからリクエストを送信しようとするとエラーが発生します。perl

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->credentials($netloc,$realm,$username,$password);
use HTTP::Request::Common;
my $req = HTTP::Request::Common::POST($url,'content' => $conf);

$req->as_string()

POST http:.....
Content-Length: 31003
Content-Type: application/x-www-form-urlencoded

.....&createTime=1361370652541&parameters=HASH(0x28fd658)&parameters=HASH(0x28fd670)&parameters=HASH(0x28fd6e8)&parameters=HASH(0x28fd760)&nodes=32&.....&alerts=HASH(0x632d00)&alerts=HASH(0x245abd0)&.....

私が得るエラーは

Unexpected character ('H' (code 72)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')

これは、問題が繰り返される要素にあるparameters=HASH(...)と私に思わせ ます。alerts=HASH(...)代わりに私は次のようなものを見たい

alerts=%5B%7B%22email%22%3A%22foo%40bar.com%22%2C%22type%22%3A%221%22%2C%22timeout%22%3A%22%22%7D%5D    

$confはハッシュ参照であり、$conf->{"parameters"} and $ conf-> {"alerts"} `は配列参照です(その要素はハッシュ参照です)。

私は何が間違っているのですか?

4

1 に答える 1

3

参照を投稿することはできません。おそらく、何らかの方法でそれらをシリアル化する必要があります。サーバーは何を期待していますか?

エラーから、配列全体または場合によってはその中の各ハッシュをJSONでシリアル化する必要があるように見えます。

use JSON;  # preferably have JSON::XS installed
my %prepared_conf = %$conf;
for my $field ( 'parameters', 'alerts' ) {
    $prepared_conf{$field} =
        JSON::to_json( $prepared_conf->{$field}, { 'ascii' => 1 } );
}
my $req = HTTP::Request::Common::POST($url,'content' => \%prepared_conf);
于 2013-02-26T16:30:30.777 に答える