You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Perl的Mojolicious调用REST服务时无法解析响应体哈希值

问题分析与解决

你的核心问题是没有解析REST接口返回的JSON响应体,只是打印了原始响应内容,导致$RequestID变量无法获取对应值。另外代码存在冗余模块和不够优雅的写法,以下是修正方案:

原代码的主要问题

  • 导入了不必要的模块(Mojo::Message::Response、Mojo::Promise、Mojo::Content::MultiPart),增加代码冗余
  • 手动拼接URL易出错且不够简洁
  • 未对返回的JSON响应做解析,无法提取RequestID等字段

修正后的代码

use Mojo::UserAgent;

# 用Mojo::URL优雅构建请求URL
my $url = Mojo::URL->new('http://localhost:31297/api/CallBack/RegisterCallBackURL')
  ->query({
    CallBackURL   => 'http://localhost:8081/status',
    VerboseFlag   => 'false',
    'api-version' => '1.2'
  });

my $ua = Mojo::UserAgent->new;
my $tx = $ua->post($url);

my $res = $tx->result;                  
if ($res->is_success) 
{
    print "success\n";
    print $res->message . "\n";
    
    # 解析JSON响应为哈希引用
    my $response_data = $res->json;
    
    # 提取RequestID并赋值给变量
    my $RequestID = $response_data->{RequestID};
    
    # 打印完整响应数据和提取的RequestID
    print "响应内容: " . $res->body . "\n";
    print "提取的RequestID: $RequestID\n";
}
else
{
    print "Error\n";
    print $res->message . "\n";
}

关键修正点说明

  1. 简化URL构建:使用Mojo::URL的query方法自动拼接查询参数,避免手动拼接时的格式错误
  2. 移除冗余模块:仅保留Mojo::UserAgent,它已集成JSON解析功能,无需额外导入Mojo::JSON
  3. 解析JSON响应:调用$res->json()方法将响应体直接转换为Perl哈希引用,方便提取字段
  4. 提取RequestID:从解析后的哈希中直接获取RequestID字段值,赋值给变量使用

运行修正后的代码,$RequestID就能成功获取到接口返回的UUID值。

内容的提问来源于stack exchange,提问作者Martin R. Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:05:13