其实大家可以去查阅一下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"
}
}
}