当前位置: 首页 > news >正文

laravel GuzzleHttp Client 无法获取返回的错误信息

Client发送一些请求,当返回状态不是200的时候,无法获取完整错误信息

$client = new Client(['base_uri' => $this->getUri().'/order/aaaaaa','timeout' => 30,'verify' => false]);try {$response = $client->request('POST', '', ['headers' => ['Lang'=>'zh-CN','Authorization' => 'Bearer ' . $accessToken],'json' =>['channelCode' => '','exportId' => '',]]);$response = $response->getBody()->getContents();return $this->success('登录成功', collect([]));} catch (GuzzleException $e) {dd($e->getResponse()->getBody()->getContents());return $this->error($e->getMessage(), collect([]));}

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

Client error: `POST http://192.168.11.1/api/order/aqedd` resulted in a `422 Unprocessable Content` response:{"success":false,"code":422,"locale":"zh-CN","message":"给定的数据不能为空","data":{"channelCode":["channel cod (truncated...)

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

dd($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的核心代码,所以还是使用上面的方法来获取完整的异常信息吧。

http://www.lryc.cn/news/426100.html

相关文章:

  • XMOS 多路音频解码器
  • XSS小游戏(题目+解析)
  • 《Redis核心技术与实战》学习笔记4——AOF日志:宕机了,Redis如何避免数据丢失?
  • NextJs - 服务端/客户端组件之架构多样性设计
  • 使用 Python 进行 PDF 文件加密
  • Spring Boot集成RabbitMQ
  • OLED屏幕制造工艺流程
  • knowLedge-VueCLI项目中环境变量的定义与使用
  • 【C#】 接口 继承
  • Self-Supervised Learning(李宏毅老师系列)
  • 8月16日笔记
  • 苹果Mac电脑——装macOS和Windows双系统的方法
  • 【C++ 面试 - 基础题】每日 3 题(十五)
  • 数学建模学习笔记
  • 个人可识别信息(PII) AI 去除 API 数据接口
  • 【Python-办公自动化】1秒提取PPT文本内容形成目录保存至WORD
  • maven介绍与安装
  • 瑞友科技项目经理认证负责人杨文娟受邀为第四届中国项目经理大会演讲嘉宾︱PMO评论
  • Ubuntu基础使用
  • 知识图谱结构的提示
  • (计算机网络)网络层
  • [upload]-[GXYCTF2019]BabyUpload1-笔记
  • 2023卫星视频综述论文Recent Advances in Intelligent Processing of Satellite Video
  • Mysql的Binlog的数据样例
  • 基于VS2022+Qt5+C++的串口助手开发
  • Mysql之视图
  • 【开端】Java 分页工具类运用
  • leetcode每日一题48
  • 源码工具文档手册
  • hive之greatest和least函数