如何使用HTTP::Request::Common的PUT请求向REST API传递HASH?
问题分析与解决
你当前的问题出在两个核心点:
- 构建的请求数据没有匹配API要求的外层
data嵌套结构 - 错误地将哈希引用包裹进数组传递,导致客户端序列化时出现异常
正确的代码写法
先构建完全符合API格式的嵌套哈希结构,再直接将该哈希引用作为请求体参数传递:
# 生成符合API要求的完整数据结构 my %request_payload = ( data => { customs => \%customs } ); # 发送PUT请求,传入正确的哈希引用参数 my $request = PUT($url, \%request_payload);
原代码出错原因
你之前把{ 'customs' => \%customs }放进了数组@data中,REST客户端处理数组参数时会将其序列化为JSON数组,而API期望接收的是JSON对象。同时Perl中的哈希引用直接被字符串化时会输出HASH(0x...)格式的内容,这就导致API端收到了包含该字符串的数组值。
如果你的REST客户端需要手动处理JSON序列化(比如使用REST::Client),可以补充序列化步骤并设置请求头:
use JSON; my %request_payload = ( data => { customs => \%customs } ); # 把哈希序列化为JSON字符串 my $json_content = encode_json(\%request_payload); my $client = REST::Client->new(); # 发送请求时指定Content-Type $client->PUT($url, $json_content, {'Content-Type' => 'application/json'});
内容的提问来源于stack exchange,提问作者vesii
相关产品推荐
相关产品推荐

