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

Laravel中响应体日志有数据但返回时为空的问题

问题原因

你遇到的问题是因为$response->getBody()返回的是PSR-7 Stream流对象,而非直接的字符串。当你用Log::info($body)输出时,PHP会自动调用流对象的__toString()方法读取全部内容,这个操作会将流的内部指针移动到末尾。后续返回这个流对象时,指针已经在末尾位置,无法再读取到内容,所以最终返回的是空对象{}。

解决方案

有两种简单的解决方式:

方式一:直接将流转换为字符串存储

把流对象转换成字符串后再使用,这样变量里存的是完整的响应内容,不会受流指针位置影响:

if ($response->getStatusCode() === 200) {
    // 用getContents()获取字符串内容,或者直接(string)$response->getBody()
    $body = $response->getBody()->getContents();
    \Log::info($body);
    return ['error' => false, 'result' => $body];
}

方式二:重置流指针后再返回

如果需要保留流对象,可以在返回前重置指针到流的开头,这样后续读取时能重新获取内容:

if ($response->getStatusCode() === 200) {
    $body = $response->getBody();
    \Log::info($body);
    $body->rewind(); // 将流指针重置到起始位置
    return ['error' => false, 'result' => $body];
}

推荐使用方式一,因为返回字符串在后续序列化(比如转JSON)时更可靠,不会出现意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:41:17