PHP中get返回数据太长被截断,GuzzleHttp 异常信息为什么会被截取?

当我们在使用这个扩展包的时候,发送一些请求,当请求出现问题,就要去获取他的异常,而当我们使用下面的代码时,会发现异常会被截断

try{

.

.

.

$info = $response->getBody()->getContents();

return $info;

}catch (\GuzzleHttp\Exception\RequestException $e){

ErrorLogs($e->getMessage(),'exception');

}

最后当捕获到异常的时候,会出现下面这种现象

{"message":"Unable to read image from path (\/tmp\/php9tgESo).","status_code":500,"debug":{"line":26,"file":"\/wwwroot\/default (truncated...)

可以看到,这并不是完整的报错信息,因为在最关键的代码排查处,出现了截取,截取的关键字就是truncated...,那么怎么获取到完整的信息呢

这样做

//var_dump($e->getResponse()->getBody()->getContents());

使用上面的代码就可以获取到完整报错信息

被截断的原始是Guzzle代码里做了限制,来看Exception源码,源码来自文件

//.\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php

public static function getResponseBodySummary(ResponseInterface $response)

{

$body = $response->getBody();

if (!$body->isSeekable()) {

return null;

}

$size = $body->getSize();

if ($size === 0) {

return null;

}

$summary = $body->read(120);

$body->rewind();

if ($size > 120) {

$summary .= ' (truncated...)';

}

// Matches any printable character, including unicode characters:

// letters, marks, numbers, punctuation, spacing, and separators.

if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) {

return null;

}

return $summary;

}

所以当$size超过了120个字符之后,就会用(truncated...)截取,当然我们不希望去改动GuzzleHttp的核心代码,所以还是使用上面的方法来获取完整的异常信息吧。

原文参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值