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

如何在PHP(Laravel)中正确配置CURL对接ngrok 解决ERR_NGROK_3200错误

触发报错:ERR_NGROK_3200 Tunnel hostname not found

报错参考截图

ngrok报错截图

报错原因说明

该报错的核心是CURL请求使用的ngrok隧道主机名无效,常见触发场景:

  • 使用了已经过期的ngrok免费临时域名(免费版ngrok每次重启都会生成新的随机域名)
  • 填写ngrok域名时存在拼写错误、多余空格或特殊字符
  • 本地ngrok隧道未启动,或启动时绑定的端口和Laravel服务运行端口不一致
Laravel中CURL对接ngrok正确配置步骤

步骤1:先启动并确认ngrok隧道有效

  1. 启动Laravel本地服务,默认通过php artisan serve启动后运行在127.0.0.1:8000
  2. 启动ngrok绑定对应端口,执行命令:ngrok http 8000
  3. 复制ngrok启动后输出的有效HTTPS域名,格式类似https://xxxx-xx-xx-xx-xx.ngrok.io
  4. 先在浏览器直接访问该域名,确认可以正常打开你的Laravel站点,再进行后续对接

步骤2:Laravel中CURL请求配置

方式1:使用Laravel默认集成的GuzzleHttp(推荐)

先将有效ngrok域名写入项目.env配置文件:

NGROK_URL=https://xxxx-xx-xx-xx-xx.ngrok.io

业务代码示例:

<?php

use GuzzleHttp\Client;

$client = new Client();
try {
    $response = $client->post(env('NGROK_URL') . '/你的接口路由', [
        'headers' => [
            'Accept' => 'application/json',
            // 必加:跳过ngrok浏览器警告页,否则会返回ngrok验证页面而非接口响应
            'ngrok-skip-browser-warning' => 'true'
        ],
        'form_params' => [
            'param1' => '测试参数1',
            'param2' => '测试参数2'
        ]
    ]);
    $result = json_decode($response->getBody()->getContents(), true);
    dd($result);
} catch (\Exception $e) {
    dd('请求错误:' . $e->getMessage());
}

方式2:使用原生PHP CURL

<?php

$ngrokUrl = "https://xxxx-xx-xx-xx-xx.ngrok.io/你的接口路由";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ngrokUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// 本地测试可关闭SSL验证,生产环境请删除该行
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Accept: application/json',
    'ngrok-skip-browser-warning: true'
]);
// 若为POST请求,添加下方两行配置
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'param1' => '测试参数1',
    'param2' => '测试参数2'
]));

$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'CURL错误:' . curl_error($ch);
}
curl_close($ch);
$result = json_decode($response, true);
dd($result);
常见避坑点
  • 免费版ngrok每次重启后域名都会更新,重启ngrok后必须同步修改代码或配置文件中的域名,不能继续使用旧域名
  • 不需要在ngrok域名后追加Laravel服务的本地端口,ngrok已经完成端口映射,直接使用生成的域名即可
  • 可将Laravel项目config/app.php中的url配置项修改为你的ngrok域名,避免项目生成的链接自动带上本地域名

内容的提问来源于stack exchange,提问作者NeverStopLearning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:57:00