使用chrome-php/headless-chromium触发HandshakeException异常求助
排查chrome-php与headless-chromium握手异常问题
正常使用chrome-php与headless-chromium库数月后,近期突然触发以下致命错误:
Fatal error: Uncaught Wrench\Exception\HandshakeException: No accept header receieved on handshake response in C:\Users\kamurj\vendor\chrome-php\wrench\src\Protocol\Protocol.php:469 Stack trace: #0 C:\Users\kamurj\vendor\chrome- php\wrench\src\Client.php(243): Wrench\Protocol\Protocol->validateResponseHandshake('HTTP/1.1 403 Fo...', 'oMHZ8u72RCw63G9...') #1 C:\Users\kamurj\vendor\chrome- php\chrome\src\Communication\Socket\Wrench.php(99): Wrench\Client->connect() #2 C:\Users\kamurj\vendor\chrome- php\chrome\src\Communication\Connection.php(186): HeadlessChromium\Communication\Socket\Wrench->connect() #3 C:\Users\kamurj\vendor\chrome-php\chrome\src\Browser\BrowserProcess.php(146): HeadlessChromium\Communication\Connection->connect() #4 C:\Users\kamurj\vendor\chrome-php\chrome\src\BrowserFactory.php(81): HeadlessChromium\Browser\BrowserProcess->start('C:\\Program File...', Array) #5 C:\xampp\htdocs\zmeta.php(266): HeadlessChromium\BrowserFactory->createBrowser(Array) #6 {main} thrown in C:\Users\kamurj\vendor\chrome-php\wrench\src\Protocol\Protocol.php on line 469
排查方向及解决方案:
- Chrome版本适配问题:Chrome自动更新后,headless模式的通信协议或权限逻辑可能发生变化,导致握手失败。先尝试更新chrome-php到最新版本:
若更新后仍有问题,可在启动浏览器时添加兼容参数:composer update chrome-php/chrome$browser = $browserFactory->createBrowser([ 'args' => [ '--no-sandbox', '--disable-gpu', '--remote-debugging-port=9222' // 指定可用端口 ] ]); - 网络/安全拦截:错误栈中显示返回
HTTP/1.1 403 Forbidden,说明握手请求被拦截。排查本地防火墙、杀毒软件是否阻止了Chrome的网络请求,或是否有代理设置干扰了WebSocket通信,暂时关闭相关软件测试。 - 依赖库握手逻辑冲突:wrench库的握手验证逻辑可能与新版Chrome不兼容,优先通过更新依赖解决,若无法更新,可尝试调整wrench的验证逻辑(需谨慎修改源码)。
- 文件权限问题:Chrome的临时目录或用户数据目录权限不足,导致启动异常。手动指定一个有读写权限的目录:
$browser = $browserFactory->createBrowser([ 'userDataDir' => 'C:/Users/kamurj/AppData/Local/Temp/chrome-php-data' // 确保该目录可读写 ]); - 端口占用问题:检查
--remote-debugging-port指定的端口是否被其他进程占用,更换一个未被使用的端口测试。
内容的提问来源于stack exchange,提问作者virap
相关产品推荐
相关产品推荐

