Laravel 5.8中如何使用GuzzleHttp改写Http门面请求代码
Laravel 5.8 下使用 GuzzleHttp 改写 Http 门面代码方案
Laravel 内置 Http 门面是 7.0 及以上版本才提供的功能,5.8 版本可通过 GuzzleHttp 实现完全等效的请求逻辑,改写步骤和代码如下:
- 确认依赖安装
如果还未安装 GuzzleHttp,先在项目根目录执行以下命令完成安装:
composer require guzzlehttp/guzzle
- 改写后的业务代码
public function getAddress(Request $request) { // 实例化客户端,对齐原代码的超时配置、默认错误处理行为 $client = new \GuzzleHttp\Client([ 'timeout' => 15, 'http_errors' => false, ]); // 发起GET请求,传入自定义请求头、查询参数 $response = $client->get('https://api.sitename.org/v4/reverse', [ 'headers' => [ 'Api-Key' => 'api-key', ], 'query' => [ 'lat' => $request->input('latitude'), 'lng' => $request->input('longitude'), ], ]); // 解析响应为关联数组,对齐原代码$response->json()的返回结构 $responseArr = json_decode($response->getBody()->getContents(), true); $address = $responseArr['formatted_address']; return view('address.index', compact('address')); }
- 参数映射说明
timeout配置:对应原代码Http::timeout(15),设置请求超时时间为15秒,单位为秒headers配置项:对应原代码withHeaders()传入的自定义请求头数组query配置项:对应原代码get方法第二个参数传入的查询参数数组,Guzzle会自动完成URL编码和参数拼接- 响应解析逻辑:
$response->getBody()->getContents()用于获取接口返回的原始JSON字符串,传入json_decode第二个参数为true时返回关联数组,和原代码json()方法返回结果完全一致 http_errors => false配置:对齐Laravel Http门面默认行为,接口返回4xx、5xx状态码时不直接抛出异常,保持和原代码一致的错误处理逻辑,无此需求可删除该配置。
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

