Perl:解析下一个curl请求的json响应

Perl:解析下一个curl请求的json响应,perl,Perl,在perl中有没有办法解析下一个curl请求的json响应 e、 g 我有一个命令: curl -H "Content-Type: application/json" -H "Authorization: Bearer DS_12345" -X GET https://api.xxx 答复是: { "method":"a", "users":["user@xxx.com "], "status":"DONE", "export-url":"https://api.xxx/v1/

在perl中有没有办法解析下一个curl请求的json响应

e、 g

我有一个命令:

curl -H "Content-Type: application/json" -H "Authorization: Bearer DS_12345" -X GET https://api.xxx
答复是:

{
  "method":"a",
  "users":["user@xxx.com "],
  "status":"DONE",
  "export-url":"https://api.xxx/v1/export/DP_6789xxx"
}
当等待直到响应包含状态:DONE时,不要使用FAIL或PROCESSING,而是使用上一步中的响应导出url:运行下一步。当状态为“正在处理”时,我不想退出程序并再次运行它。相反,我希望等到状态完成后再进行下一步

感谢您的时间和帮助。

无需使用curl。用于使用将请求转换为Perl

使用库解析JSON。在这里,我用过,但对于像这样简单的东西,任何其他的都应该可以

#!/usr/bin/perl
use strict;
use warnings;

use LWP::UserAgent;
use Cpanel::JSON::XS;

my $ua = 'LWP::UserAgent'->new(send_te => 0);
my $req = 'HTTP::Request'->new(
    GET => 'https://api.xxx/',
    [
        'Accept'        => '*/*',
        'Authorization' => 'Bearer DS_12345',
        'Host'          => 'api.xxx:443',
        'User-Agent'    => 'curl/7.55.1',
        'Content-Type'  => 'application/json',
    ],

);
my $res = $ua->request($req);
die $res->status_line unless $res->is_success;

my $response_structure = decode_json($res->decoded_content);
if ($response_structure eq 'DONE') {
    my $req = 'HTTP::Request'->new(
        GET => $response_structure->{'export-url'} . '?view=xml',
        [
            'Accept'        => '*/*',
            'Authorization' => 'Bearer DS_12345',
            'Host'          => 'api.xxx:443',
            'User-Agent'    => 'curl/7.55.1',
            'Content-Type'  => 'application/json',
        ],

    );
    my $res = $ua->request($req);
    ...
}

最好有一个curl2curl命令,它生成Net::Curl代码而不是LWP::UserAgent代码!Curl速度快得多,支持并行请求。@ikegami:试着监听一下Corion-或者我可以自己写,他听说你在decode\u json$res中没有->decode\u内容吗?此外,a->is_success before可能是一个合理的想法。非常感谢@choroba。状态可能是“正在处理”,对此,我不想退出程序,而是想等到它完成状态:完成,然后进入下一步。
#!/usr/bin/perl
use strict;
use warnings;

use LWP::UserAgent;
use Cpanel::JSON::XS;

my $ua = 'LWP::UserAgent'->new(send_te => 0);
my $req = 'HTTP::Request'->new(
    GET => 'https://api.xxx/',
    [
        'Accept'        => '*/*',
        'Authorization' => 'Bearer DS_12345',
        'Host'          => 'api.xxx:443',
        'User-Agent'    => 'curl/7.55.1',
        'Content-Type'  => 'application/json',
    ],

);
my $res = $ua->request($req);
die $res->status_line unless $res->is_success;

my $response_structure = decode_json($res->decoded_content);
if ($response_structure eq 'DONE') {
    my $req = 'HTTP::Request'->new(
        GET => $response_structure->{'export-url'} . '?view=xml',
        [
            'Accept'        => '*/*',
            'Authorization' => 'Bearer DS_12345',
            'Host'          => 'api.xxx:443',
            'User-Agent'    => 'curl/7.55.1',
            'Content-Type'  => 'application/json',
        ],

    );
    my $res = $ua->request($req);
    ...
}