Laravel发起API请求前如何检测互联网连接,无网时返回提示
Laravel调用TMDB接口无网报错解决方案
方案1:捕获HTTP请求异常(更推荐)
该方案可以覆盖所有请求失败场景:无网、接口超时、接口服务故障、权限错误等,比单纯提前检测网络适用范围更广
首先引入请求连接异常类,再用try-catch包裹请求逻辑即可:
use Illuminate\Http\Client\ConnectionException; try { $popularMovies = Http::withToken(config('services.tmdb.token')) ->get('https://api.themoviedb.org/3/movie/popular') ->json()['results']; // 注:原代码分类列表的请求地址有误,修正为官方分类接口 $genreList = Http::withToken(config('services.tmdb.token')) ->get('https://api.themoviedb.org/3/genre/movie/list') ->json()['genres']; return view('index', compact('popularMovies', 'genreList')); } catch (ConnectionException $e) { // 连接失败时直接返回提示 return '无互联网连接'; }
方案2:提前检测网络连通性
如果需要在发起所有请求前先判断网络状态,可以通过端口检测判断公网连通性:
// 测试连通TMDB接口的443端口,超时时间设为2秒 $hasNetwork = @fsockopen('api.themoviedb.org', 443, $errno, $errstr, 2); if (!$hasNetwork) { return '无互联网连接'; } // 网络正常再执行原有请求逻辑 $popularMovies = Http::withToken(config('services.tmdb.token')) ->get('https://api.themoviedb.org/3/movie/popular') ->json()['results']; $genreList = Http::withToken(config('services.tmdb.token')) ->get('https://api.themoviedb.org/3/genre/movie/list') ->json()['genres']; return view('index', compact('popularMovies', 'genreList'));
内容的提问来源于stack exchange,提问作者SnYpe
相关产品推荐
相关产品推荐

