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

如何使用Perl 5发起带Basic auth的POST请求调用REST API?

错误原因

Can't call method "clone" on unblessed reference报错是因为HTTP::Request->new的第三个请求头参数要求传入数组引用[],你最初传入的是哈希引用{},不符合模块参数要求,调整为数组引用后即可解决该问题。

完整可运行代码

除了请求头格式问题,你原代码还缺少发送HTTP请求的步骤,需要用LWP::UserAgent完成请求发送、响应接收逻辑,完整实现如下:

use strict;
use warnings;
use LWP::UserAgent;
use JSON::MaybeXS qw(encode_json decode_json);
use MIME::Base64 qw(encode_base64);

# 配置凭证与接口地址
my $username = '你的用户名';
my $password = '你的密码';
my $url = 'https://testapi.com/webapi/AddData';

# 初始化UA
my $ua = LWP::UserAgent->new;
# 测试环境如果是自签名SSL证书可以打开下面配置,生产环境建议注释
# $ua->ssl_opts( verify_hostname => 0, SSL_verify_mode => 0 );

# 构造请求头:注意用数组引用,encode_base64第二个参数传空避免自动加换行
my $headers = [
    'Content-Type' => 'application/json; charset=UTF-8',
    'Authorization' => 'Basic ' . encode_base64($username . ':' . $password, '')
];

# 构造请求体,encode_json直接输出UTF-8字节流,无需额外encode_utf8
my $post_data = {
    GroupName => 'City',
    Member => 'New York'
};
my $encoded_data = encode_json($post_data);

# 构造POST请求
my $request = HTTP::Request->new('POST', $url, $headers, $encoded_data);

# 发送请求获取响应
my $response = $ua->request($request);

# 处理响应
if ($response->is_success) {
    # 解析JSON响应
    my $res_data = decode_json($response->decoded_content);
    # 提取ReturnValue字段
    print "接口返回ReturnValue:" . $res_data->{ReturnValue} . "\n";
} else {
    print "请求失败,错误信息:" . $response->status_line . "\n";
    # 调试时可以打印完整错误响应
    # print $response->decoded_content . "\n";
}
注意事项
  • 调用encode_base64时要传入第二个空字符串参数,避免函数自动在末尾添加换行符,导致Authorization头格式错误
  • encode_json默认输出UTF-8编码的字节串,不需要额外嵌套encode_utf8,否则会导致中文重复编码出错
  • 生产环境不要关闭SSL证书校验,避免安全风险

内容的提问来源于stack exchange,提问作者Mr.Human

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:06:03