前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GuzzleHttp 异常信息为什么会被截取?

GuzzleHttp 异常信息为什么会被截取?

作者头像
咪啪咪啪
发布2019-11-15 20:10:33
1.5K0
发布2019-11-15 20:10:33
举报
文章被收录于专栏:PHP-咪啪咪啪

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

代码语言:javascript
复制
 try{
    .
    .
    .
    $info = $response->getBody()->getContents();

    return $info;
}catch (\GuzzleHttp\Exception\RequestException $e){
    ErrorLogs($e->getMessage(),'exception');
}

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

代码语言:javascript
复制
{"message":"Unable to read image from path (\/tmp\/php9tgESo).","status_code":500,"debug":{"line":26,"file":"\/wwwroot\/default (truncated...)

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

代码语言:javascript
复制
//var_dump($e->getResponse()->getBody()->getContents());

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

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

代码语言:javascript
复制
//.\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的核心代码,所以还是使用上面的方法来获取完整的异常信息吧。

原文参考:

https://laracasts.com/discuss/channels/general-discussion/guzzle-error-message-gets-truncated?page=1 https://stackoverflow.com/questions/41293050/error-log-truncated-in-laravel-5-3

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档