Curl版本更新后接口调用失效,请求谷歌auth接口返回403错误排查
curl新旧版本请求Google auth接口403问题解决思路
高概率排查方向
- 请求头差异校验:新旧版本curl默认携带的
User-Agent、Accept等隐式请求头存在差异,Google接口对UA校验规则严格,可直接指定旧版本curl的UA字符串发起请求,或手动补全旧版本请求中所有额外请求头。 - URL编码逻辑差异校验:curl 7.52.1版本调整了
--data-urlencode的转义规则,对部分特殊字符的处理与7.38.0版本不一致。可直接抓取旧版本请求的原始POST Body,替换自动编码逻辑,使用-d "原始编码后的参数字符串"硬编码传参测试。 - PSL特性关闭测试:新版本curl默认开启PSL(公共后缀列表)特性,可能影响域名、Cookie相关逻辑,可添加
--no-sessionid关闭SSL会话复用,手动指定Host头避免PSL对域名的处理改动。 - TLS扩展关闭测试:新旧版本TLS握手阶段携带的扩展项存在差异,可添加
--no-alpn --no-npn禁用ALPN/NPN扩展,排除协议协商阶段的差异影响。
测试命令参考
docker run php:7.1.17 curl -v -s 'https://android.clients.google.com/auth' \ --http1.1 \ -A "curl/7.38.0 (x86_64-pc-linux-gnu) libcurl/7.38.0 OpenSSL/1.0.1t zlib/1.2.8 libidn/1.29 libssh2/1.4.3 librtmp/2.3" \ --no-alpn --no-npn \ --no-sessionid \ --header 'Host: android.clients.google.com' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'Email=myemail@gmail.com' \ --data-urlencode 'EncryptedPasswd=LongEncryptedPassword'
终极定位方法
如果以上方案均无效,可在两个curl命令中添加--trace-ascii debug.log参数导出完整请求日志,逐行对比请求头、请求体的所有字段差异,即可定位到导致鉴权失败的具体字段。
内容的提问来源于stack exchange,提问作者atay
相关产品推荐
相关产品推荐

