Python调用Google Ads API遇SSL错误,Clash代理下求助
解决Google Ads API未通过Clash for Windows代理连接的问题
问题场景
- 所在地区受防火墙限制无法直接访问Google,但浏览器通过Clash for Windows可正常访问
- 在Windows 10的Jupyter Notebook运行Google Ads API测试代码时,出现如下SSL错误:
[TransportError: HTTPSConnectionPool(host='accounts.google.com', port=443): Max retries exceeded with url: /o/oauth2/token (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1006)')))]
- 推测API请求未走Clash的代理路由
排查与修复步骤
1. 确认Clash的代理端口
Clash默认HTTP/HTTPS代理端口为7890,Socks5端口为7891,打开Clash主界面的「代理」标签即可查看具体端口号。
2. 给Python进程设置全局代理
Google Ads API底层依赖requests或grpc库,需让Python进程走代理,两种方式任选其一:
方式一:代码内直接设置环境变量
在加载Google Ads Client的代码前添加以下内容:
import os # 替换为你的Clash端口,HTTP/HTTPS共用同一端口即可 os.environ['HTTP_PROXY'] = 'http://127.0.0.1:7890' os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890' # 若使用Socks5代理,替换为以下格式 # os.environ['HTTP_PROXY'] = 'socks5://127.0.0.1:7891' # os.environ['HTTPS_PROXY'] = 'socks5://127.0.0.1:7891'
方式二:通过系统环境变量配置全局代理
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 在「用户变量」中新建两个变量:
- 变量名
HTTP_PROXY,值http://127.0.0.1:7890 - 变量名
HTTPS_PROXY,值http://127.0.0.1:7890
- 变量名
- 重启Jupyter Notebook后生效
3. 给Google Ads Client单独配置代理
若全局代理未生效,可直接在google-ads.yaml中添加代理配置:
proxy: url: http://127.0.0.1:7890 # 若代理需要认证(Clash一般无需),添加以下两行 # username: your_proxy_username # password: your_proxy_password
或在代码加载Client时直接传入代理参数:
googleads_client = GoogleAdsClient.load_from_storage( path=r"C:\Users\tomxi\google-ads.yaml", version="v15", proxy={"url": "http://127.0.0.1:7890"} )
4. 验证代理是否生效
添加测试代码确认请求是否走代理:
import requests # 测试访问Google resp = requests.get('https://google.com') print(resp.status_code) # 返回200即为成功 # 查看当前使用的代理 print(os.environ.get('HTTPS_PROXY'))
5. 检查Clash规则设置
- 确认Clash的「规则」中未拦截
accounts.google.com或googleads.googleapis.com的请求 - 可临时切换到「全局模式」测试,若能正常运行,说明是规则问题,调整规则放行上述域名
内容的提问来源于stack exchange,提问作者EggShell
相关产品推荐
相关产品推荐

