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

如何通过cURL登录谷歌账号?现有脚本因登录机制变更报错

谷歌账号cURL登录完整步骤(解决GALX/gxf Token解析失败问题)

嘿,我之前碰到过一模一样的情况!谷歌最近确实把登录流程改得更严格了,那些依赖抓取页面token的老脚本很容易就失效了。你遇到的Could not parse for GALX or gxf token错误,本质就是脚本没法从密码页面正确提取登录必需的验证参数。下面是适配当前谷歌登录机制的cURL完整登录步骤,你可以对照着调整你的脚本:

核心步骤

1. 初始化cURL会话,开启Cookie管理

谷歌登录全程依赖Cookie维持会话,所以第一步必须配置Cookie存储,同时伪装成主流浏览器的请求(谷歌会拦截疑似爬虫的请求):

// 临时生成Cookie文件存储路径
$cookieFile = tempnam(sys_get_temp_dir(), 'gvoice_cookie');
$ch = curl_init();

// 启用Cookie读写
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
// 自动跟随跳转
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// 返回响应内容而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 设置主流浏览器UA,避免被识别为爬虫
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');

2. 访问初始登录页,提取会话基础Token

不要直接访问密码页,得先从谷歌登录入口页获取初始会话参数,比如GALX、gxf、sessiontoken,这些是后续提交表单的必需项:

// 请求登录入口页
curl_setopt($ch, CURLOPT_URL, 'https://accounts.google.com/signin');
$html = curl_exec($ch);

// 用正则提取GALX参数
preg_match('/name="GALX" value="([^"]+)"/', $html, $galxMatches);
$galx = $galxMatches[1] ?? '';

// 提取gxf参数
preg_match('/name="gxf" value="([^"]+)"/', $html, $gxfMatches);
$gxf = $gxfMatches[1] ?? '';

// 提取sessiontoken参数
preg_match('/name="sessiontoken" value="([^"]+)"/', $html, $sessionMatches);
$sessiontoken = $sessionMatches[1] ?? '';

3. 提交用户名,进入密码验证环节

把用户名和刚才提取的Token提交到账号验证接口,这一步会更新会话Cookie,同时跳转到密码输入页:

$loginPostData = http_build_query([
    'identifier' => '你的谷歌账号邮箱',
    'GALX' => $galx,
    'gxf' => $gxf,
    'sessiontoken' => $sessiontoken,
    'continue' => 'https://voice.google.com/', // 目标跳转页,比如谷歌语音
    'checkedDomains' => 'google',
    'pstMsg' => 0,
]);

// 提交用户名到验证接口
curl_setopt($ch, CURLOPT_URL, 'https://accounts.google.com/signin/v2/challenge/pwd');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $loginPostData);
$passwordPageHtml = curl_exec($ch);

提交后,需要重新从返回的密码页HTML中提取更新后的GALX、gxf、sessiontoken(会话会刷新这些参数),方法和步骤2一致。

4. 提交密码,完成登录

用新提取的Token组装密码提交表单,完成登录:

// 重新提取密码页的Token参数
preg_match('/name="GALX" value="([^"]+)"/', $passwordPageHtml, $newGalxMatches);
$newGalx = $newGalxMatches[1] ?? '';

preg_match('/name="gxf" value="([^"]+)"/', $passwordPageHtml, $newGxfMatches);
$newGxf = $newGxfMatches[1] ?? '';

preg_match('/name="sessiontoken" value="([^"]+)"/', $passwordPageHtml, $newSessionMatches);
$newSessiontoken = $newSessionMatches[1] ?? '';

// 组装密码提交数据
$passwordPostData = http_build_query([
    'password' => '你的谷歌账号密码',
    'GALX' => $newGalx,
    'gxf' => $newGxf,
    'sessiontoken' => $newSessiontoken,
    'continue' => 'https://voice.google.com/',
    'checkedDomains' => 'google',
    'pstMsg' => 0,
]);

// 提交密码
curl_setopt($ch, CURLOPT_POSTFIELDS, $passwordPostData);
$loginResult = curl_exec($ch);

5. 处理二次验证(若开启2FA)

如果你的账号开启了两步验证,这时候会返回验证页面,需要提取challengeId等参数,然后提交验证码(比如短信验证码、Google Authenticator验证码)到对应的验证接口,逻辑和前面的表单提交类似。

6. 验证登录状态

登录完成后,请求目标页面(比如谷歌语音),检查返回内容是否包含登录后的标识(比如用户名、语音功能入口),确认登录是否成功。

关键注意事项

  • 谷歌登录流程会频繁更新,上述步骤可能随谷歌调整失效,需要定期检查页面HTML结构的变化;
  • 如果账号有异常登录记录,谷歌可能触发reCAPTCHA人机验证,cURL脚本无法自动处理,需要手动验证或借助第三方工具;
  • 避免频繁用脚本登录,容易触发谷歌安全机制导致账号被限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:41:32