Perl:解析下一个curl请求的json响应
在perl中有没有办法解析下一个curl请求的json响应 e、 g 我有一个命令: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/
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);
...
}