使用WWW::Curl::Easy发起API请求如何仅提取HTTP响应体内容
问题原因
你代码中设置了$curl->setopt(CURLOPT_HEADER, 1);,该参数会让curl将HTTP响应头和响应体一并写入返回的$response变量中,这是你拿到的结果包含响应头的核心原因。
方案1:直接修改curl配置(最简便)
如果不需要单独获取响应头信息,直接将CURLOPT_HEADER参数的值改为0即可,修改后curl返回的$response就只有纯响应体,无需额外解析处理:
# 把原来的参数1改成0 $curl->setopt(CURLOPT_HEADER, 0);
方案2:保留CURLOPT_HEADER配置,手动提取响应体
如果你确实需要同时保留响应头做其他逻辑处理,可以用以下两种方式提取响应体:
方式A:字符串分割
HTTP协议中响应头和响应体之间固定用两个连续换行分隔,直接按分隔符分割即可:
# 兼容Windows换行(\r\n)和Unix换行(\n)格式 my ($response_headers, $response_body) = split /\r?\n\r?\n/, $response, 2;
分割后$response_body就是你需要的纯响应体内容。
方式B:使用HTTP::Response模块解析
之前的用法没有生效大概率是未提前加载模块,另外建议用decoded_content方法替代content,该方法会自动处理响应编码,适配性更强:
use HTTP::Response; my $response_obj = HTTP::Response->parse($response); my $response_body = $response_obj->decoded_content;
内容的提问来源于stack exchange,提问作者tomsk
相关产品推荐
相关产品推荐

