laravel 9 使用 http 门面(基于 guzzle)替代原生 curl,通过 $response->status() 直接获取整数型状态码;successful() 判断 200–299 范围,throw() 或 http_errors => true 可自动抛出 4xx/5xx 异常。

Laravel 9 中不再直接使用原生 cURL,而是通过内置的 Http 门面(基于 Guzzle 封装)发起请求。获取 HTTP 响应状态码的方式非常直接,不需要手动调用 curl_getinfo() 这类底层函数。
用 $response->status() 获取状态码
HTTP 客户端返回的是 Illuminate\Http\Client\Response 实例,它提供了 status() 方法,可直接拿到整数型状态码:
$response = Http::get('https://httpbin.org/status/404');echo $response->status(); // 输出 404- 该方法始终返回实际响应中的状态码,包括重定向后的最终状态(默认开启自动跳转)
判断是否为成功响应
若只需区分“请求是否业务层面成功”,推荐用语义化方法:
利用农业相机拍摄植物叶片高分辨率图像,通过AI视觉技术检测叶片卷曲方向(向上卷曲或向下卷曲)
-
$response->successful():返回true当状态码在200–299范围内 -
$response->failed():等价于!$response->successful() - 注意:这不抛异常,只是检查状态码——和 cURL 的
CURLOPT_FAILONERROR行为不同
捕获并处理错误状态码
如需对 4xx/5xx 主动报错,有两种方式:
- 启用自动异常:调用
throw()或设置http_errors => true(推荐链式调用)$response = Http::withOptions(['http_errors' => true])->get(...); - 手动检查后处理:
if ($response->status() >= 400) { /* 自定义逻辑 */ }
兼容旧 cURL 逻辑的注意事项
如果你是从原生 cURL 迁移过来,注意以下差异:
- 无需
curl_exec()+curl_getinfo()两步,status()一步到位 - 默认跟随重定向(
allow_redirects => true),status()返回的是最终响应码 - 若需禁用跳转,加
withOptions(['allow_redirects' => false]),此时状态码是第一个响应的 - 连接失败(如 DNS 错、超时)会抛出
ConnectionException,不是状态码问题










