laravel guzzhttp 记录请求参数、响应参数日志

5 篇文章 0 订阅

其实大家可以去查阅一下guzzhttp的官方网址,里面有很多请求参数等相关配置。

我就是利用了官方提供的on_stats请求参数配置项,这里是官方对这个配置参数的说明:

on_stats 允许你获取请求传输数据统计以及处理器在底层传输的详情. on_stats 是个回调,当处理器完成传输一个请求的时候被调用。 该回调被调用请求传输数据统计、接收到响应,或遇到错误,包含发送请求数据时间的总量。

 那么这个参数项很符合我们去在初始化Client类的时候记录相关的请求信息、响应信息等参数,接下来是代码的演示:

//这里是控制器文件,定义一个使用guzzhttp去请求第三方API的方法
public function testRequest(): \Illuminate\Http\JsonResponse
    {
        try {

            $client = new Client([
                'http_errors' => false,
                'base_uri' => 'https://localhost:18776',
                'timeout' => 10,
                'on_stats' => function (TransferStats $stats) {
                    //这里可以获取到请求对象
                    $request = $stats->getRequest();

                    $logsContent["REQUEST"] = [
                        "PATH" => $request->getUri()->getPath(),
                        "METHOD" => $request->getMethod(),
                        "QUERY" => $request->getUri()->getQuery(),
                        "BODY" => json_decode($request->getBody(), true)
                    ];

                    //判断是否有正常的响应对象
                    if ($stats->hasResponse()) {
                        //这里可以获取到响应对象
                        $response = $stats->getResponse();
                        $logsContent["RESPONSE"] = [
                            "STATUS_CODE" => $response->getStatusCode(),
                            "BODY" => json_decode($response->getBody(), true)
                        ];
                    } else { //这里一般都是网络发生错误,常见的有CURL错误码
                        if ($stats->getHandlerErrorData() instanceof \Exception) {
                            $error = $stats->getHandlerErrorData()->getMessage();
                        } else {
                            $error = $stats->getHandlerErrorData();
                        }
                        $logsContent["RESPONSE"] = [
                            "ERROR" => $error
                        ];
                    }

                    Log::info(json_encode($logsContent, 320));
                }
            ]);

            $r1 = $client->postAsync("/test?id=123", [
                "json" => [
                    "id" => 1001,
                    "name" => "zhangfei"
                ]
            ]);

            $response = [];

            $r1->then(
                function (ResponseInterface $res) use (&$response) {
                    $response = json_decode($res->getBody()->getContents(), true);
                }
            )->wait();

        } catch (\Throwable $exception) {

            return response()->json(["code" => 500, "message" => $exception->getMessage()]);

        }

        return response()->json(["code" => 200, "message" => "success", "data" => $response["data"] ?? ""]);
    }

 这里使用postman请求定义好的laravel控制器方法:

 请求完成之后可以查看laravel日志文件,我这里不方便截图直接打印出完整的日志JSON:

{
	"REQUEST": { //请求信息
		"PATH": "/test",
		"METHOD": "POST",
		"QUERY": "id=123",
		"BODY": {
			"id": 1001,
			"name": "zhangfei"
		}
	},
	"RESPONSE": { //响应信息
		"STATUS_CODE": 200,
		"BODY": {
			"code": 200,
			"data": {
				"age": "男",
				"name": "zhangfei"
			},
			"msg": "success"
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值