0

perl mechanize モジュールを使用して有効な JSON リクエストを送信する方法

私は試した

use WWW::Mechanize;
use JSON;   

my $mech=WWW::Mechanize->new(
    stack_depth     => 10,
    timeout         => 120,
    autocheck       => 0,
);

$mech->agent_alias( 'Windows Mozilla' );

my $json =  '{"jsonrpc":"2.0","id":1,"params":{"query":    {"limit":2000,"start":0,"orderBy":[{"columnName":"osName","direction":"Asc"}]},"refresh":true}}';

$url  ="http://path/to/url/";

$mech->post($url,$json);

結果が期待どおりにならない 常にjsonエラーを解析します。

だから私は投稿するだけでそれを正しくやっています $mech->post($url,$cjson);

または、何か他のことをする/追加する必要がありますか?

4

1 に答える 1

2

通常、JSONモジュールを使用して、Perl でデータ構造を作成し、JSON 形式の文字列にシリアル化できるようにします。

$json_text = encode_json $perl_scalar

これは次のようになります。

#!/usr/bin/env perl

use strict;
use warnings;

use JSON qw/encode_json/;

my $data = {
  "jsonrpc" => "2.0",
  "id" => 1,
  "params" => {
    "query" => {
      "limit" => 2000,
      "start" => 0,
      "orderBy" => [{ 
        "columnName" => "osName",
        "direction" => "Asc",
      }],
    },
    "refresh" => \0,
  },
};

print encode_json $data;

\0\1は、それぞれ false と true として使用できることに注意してください。

繰り返しになりますが、私は長い間 WWW::Mechanize を使用しておらず、ドキュメントを掘り下げるつもりはないので、Mojo::UserAgent (mech というよりも LWP::UserAgent に似ています) を使用した例を次に示します。組み込みの JSON ハンドラーがあります。

#!/usr/bin/env perl

use strict;
use warnings;

use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;

my $data = {
  "jsonrpc" => "2.0",
  "id" => 1,
  "params" => {
    "query" => {
      "limit" => 2000,
      "start" => 0,
      "orderBy" => [{ 
        "columnName" => "osName",
        "direction" => "Asc",
      }],
    },
    "refresh" => \0,
  },
};

my $url = "http://path/to/url/";
$ua->post( $url, json => $data );
于 2013-04-13T13:08:48.400 に答える