You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:24:01