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

如何导出Perl中WWW::Curl::Easy对象即将发送的完整实际请求

解决方案

你可以通过libcurl内置的调试回调能力拿到完整的真实请求内容,Dumper导出$curl对象看不到有效信息是因为该对象封装的是libcurl的内部C结构,Perl层面无法直接遍历读取配置和待发送的内容。

方法1:使用CURLOPT_DEBUGFUNCTION捕获完整请求(推荐)

该方法可以精准获取你需要的请求头、请求方法、请求体、POST数据所有内容,你可以选择打印日志或者存到变量中,示例修改代码如下:

use WWW::Curl::Easy;
use Data::Dumper;

my $curl = WWW::Curl::Easy->new();

$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_HEADER, 1);
$curl->setopt(CURLOPT_HTTPHEADER, ['Accept: text/xml; charset=utf-8', 'Content-Type:text/xml; charset=utf-8', 'SOAPAction: "importSheet"']);
$curl->setopt(CURLOPT_POSTFIELDS, $requestMessage);
$curl->setopt(CURLOPT_URL, $tom::{'setup'}{'api'}{'carrier'}{'url'});

my $response;
$curl->setopt(CURLOPT_WRITEDATA, \$response);

# 新增调试配置开始
my $full_request = '';
$curl->setopt(CURLOPT_VERBOSE, 1);
$curl->setopt(CURLOPT_DEBUGFUNCTION, sub {
    my ($easy, $type, $data, $len) = @_;
    # 回调类型说明:0=通用调试文本 1=响应头 2=响应体 3=请求头 4=请求体
    if ($type == 3 || $type == 4) {
        $full_request .= $data;
    }
    return 0;
});
# 新增调试配置结束

my $ret = $curl->perform();

# 执行完之后就可以打印或记录完整请求了
main::_log("完整请求内容:\n" . $full_request);

方法2:临时快速调试

如果只是临时排查问题,不需要存储请求内容,只需要加一行配置即可:

$curl->setopt(CURLOPT_VERBOSE, 1);

执行perform时会自动把所有请求、响应的调试信息输出到标准错误流,你可以直接查看或者重定向到日志文件。

内容的提问来源于stack exchange,提问作者tomsk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:04