AI与工具 Google AI Studio

Gemini API 调用代理设置:Python / Node.js 配置方法

Gemini API 调用报地区不支持或连接超时?本文讲清让 Python 与 Node.js 程序走代理的方法,包括 HTTPS_PROXY 环境变量、requests 显式代理、官方 SDK 与 Node.js 全局代理设置,附 PowerShell 与终端验证命令、常见报错对照和 API Key 安全要点。

Gemini API 调用代理设置:Python / Node.js 配置方法

核心结论

Python、Node.js 程序默认不读取系统代理,调用 Gemini API 前要让程序本身走代理:Python 可设置 HTTPS_PROXY 环境变量或在 requests 中显式传入代理,Node.js 需要设置全局代理调度器或使用支持环境变量代理的运行时,同时确保出口地区在 Gemini API 支持范围内。

文章目录 9 个章节
  1. 为什么调用 Gemini API 需要单独设置代理
  2. 准备工作
  3. 分步操作
  4. 第一步:设置环境变量
  5. 第二步:用命令行验证链路
  6. 第三步:Python 使用 requests 调用
  7. 第四步:Python 使用官方 SDK
  8. 第五步:Node.js 调用
  9. 验证是否成功
  10. 常见错误
  11. 让代理设置长期生效
  12. 长时间批量调用的稳定性建议
  13. 注意事项
  14. 常见问题

为什么调用 Gemini API 需要单独设置代理

Gemini API 的接口地址是 generativelanguage.googleapis.com,它会校验请求来源地区。很多人遇到的情况是:浏览器里 AI Studio 正常,一运行脚本就报 “User location is not supported” 或连接超时。

原因很简单:浏览器会使用系统代理,而 Python、Node.js 程序默认不读取系统代理,请求直接从本地网络发出。解决思路有两种:一是让程序自己走代理(设置环境变量或在代码中指定),二是在代理客户端中开启 TUN 模式,让所有程序的流量都经过代理。本文重点讲第一种,TUN 模式见 Clash Verge TUN 模式设置。

准备工作

项目 要求 说明
API Key 在 AI Studio 中创建 创建受阻时先看 AI Studio 打不开怎么办
代理端口 客户端的本地 HTTP / 混合端口 Clash Verge Rev 默认通常为 7897,以实际设置为准
节点地区 Gemini API 支持地区 避开中国香港节点,以官方可用地区文档为准
运行环境 Python 3 或 Node.js 较新 LTS 版本 版本过旧可能缺少所需功能

分步操作

第一步:设置环境变量

把 API Key 和代理地址放进当前终端的环境变量中,程序从环境变量读取,避免把密钥写进代码。

# Windows PowerShell(仅对当前窗口有效)
$env:GEMINI_API_KEY = "替换为你自己的 API Key"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:HTTP_PROXY  = "http://127.0.0.1:7897"
$env:NO_PROXY    = "localhost,127.0.0.1"
# macOS / Linux(仅对当前终端有效)
export GEMINI_API_KEY="替换为你自己的 API Key"
export HTTPS_PROXY="http://127.0.0.1:7897"
export HTTP_PROXY="http://127.0.0.1:7897"
export NO_PROXY="localhost,127.0.0.1"

注意代理地址写 http://,这是本地代理端口的协议,与目标接口是 HTTPS 并不冲突。

第二步:用命令行验证链路

先不写代码,用命令行确认代理和 API Key 都正常。下面的请求会列出当前 Key 可用的模型:

# Windows PowerShell
curl.exe -x http://127.0.0.1:7897 -s "https://generativelanguage.googleapis.com/v1beta/models" -H "x-goog-api-key: $env:GEMINI_API_KEY"
# macOS / Linux
curl -x http://127.0.0.1:7897 -s "https://generativelanguage.googleapis.com/v1beta/models" -H "x-goog-api-key: $GEMINI_API_KEY"

返回模型列表说明网络与 Key 都没问题;返回地区相关错误说明出口地区不对;超时则先检查代理客户端。

第三步:Python 使用 requests 调用

requests 会自动读取 HTTPS_PROXY 环境变量,也可以像下面这样显式传入代理,便于确认代理确实生效:

import os
import requests

api_key = os.environ["GEMINI_API_KEY"]
proxies = {"http": "http://127.0.0.1:7897", "https": "http://127.0.0.1:7897"}
# 模型名以官方模型列表为准
url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent"
payload = {"contents": [{"parts": [{"text": "用一句话介绍你自己"}]}]}

resp = requests.post(
    url,
    headers={"x-goog-api-key": api_key, "Content-Type": "application/json"},
    json=payload,
    proxies=proxies,
    timeout=60,
)
print(resp.status_code)
print(resp.json())

第四步:Python 使用官方 SDK

Google 提供的 Python SDK 可以从环境变量读取 API Key。安装方式与调用写法以官方 SDK 文档为准,常见写法如下:

# pip install google-genai
from google import genai

client = genai.Client()  # 通常从 GEMINI_API_KEY 环境变量读取密钥
resp = client.models.generate_content(
    model="gemini-2.5-flash",  # 模型名以官方文档为准
    contents="用一句话介绍你自己",
)
print(resp.text)

在第一步设置了 HTTPS_PROXY 的终端中运行即可。SDK 底层的 HTTP 库一般会读取代理环境变量,如果发现没有生效,可以改用 TUN 模式,或查阅 SDK 文档中关于自定义 HTTP 客户端的说明。旧版 SDK 的传输方式可能不同,建议升级到官方当前推荐的版本。

第五步:Node.js 调用

Node.js 内置的 fetch 默认不读取 HTTPS_PROXY,需要额外设置全局代理。一种常见做法是借助 undici 的代理调度器:

// npm install @google/genai undici
import { GoogleGenAI } from "@google/genai";
import { ProxyAgent, setGlobalDispatcher } from "undici";

setGlobalDispatcher(new ProxyAgent(process.env.HTTPS_PROXY || "http://127.0.0.1:7897"));

const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });
const res = await ai.models.generateContent({
  model: "gemini-2.5-flash", // 模型名以官方文档为准
  contents: "用一句话介绍你自己",
});
console.log(res.text);

把文件保存为 .mjs 后用 node 文件名.mjs 运行。较新版本的 Node.js 提供了让内置网络模块读取代理环境变量的选项(如 NODE_USE_ENV_PROXY=1),支持的版本与用法以 Node.js 官方文档为准;SDK 的包名与接口也可能更新,以官方 SDK 文档为准。

验证是否成功

  1. 命令行列出模型成功,说明代理与 API Key 正常;
  2. Python 或 Node.js 输出了模型回复文本,说明程序已经走代理;
  3. 临时清空 HTTPS_PROXY 再运行一次,如果报地区错误或超时,就进一步证明之前是代理在生效;
  4. 在代理客户端的连接列表中,能看到 generativelanguage.googleapis.com 的连接记录。

常见错误

报错或现象 原因 解决方法
User location is not supported 程序未走代理,或节点在不支持地区 检查环境变量是否在同一终端设置,换支持地区节点
连接超时、ConnectTimeout 代理端口错误或客户端未运行 核对端口,先用命令行验证
SSL / TLS 相关错误 代理地址写成了 https:// 改为 http://127.0.0.1:端口,参考 TLS 握手失败
403 或提示 API Key 无效 Key 错误、被删除或项目未启用 在 AI Studio 中重新创建并复制完整 Key
429 或配额提示 触发频率或配额限制 降低频率并加入退避重试,见 Too Many Requests(429)

排查时还要留意一个容易忽略的细节:在一个终端窗口里设置了环境变量,却在另一个窗口或编辑器里运行脚本,变量并不会跟过去。遇到“明明设置了代理还是报地区错误”时,先在运行脚本的同一个窗口里输出一下 HTTPS_PROXY 的值,确认它确实存在。

让代理设置长期生效

上面的环境变量只对当前终端窗口有效,关闭窗口后就失效了。如果每天都要调用 API,可以把代理写进用户级环境变量或终端配置文件:

# Windows:写入用户级环境变量,重新打开终端后生效
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://127.0.0.1:7897", "User")
[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://127.0.0.1:7897", "User")
# macOS(zsh)/ Linux(bash 改为 ~/.bashrc)
echo 'export HTTPS_PROXY="http://127.0.0.1:7897"' >> ~/.zshrc
echo 'export HTTP_PROXY="http://127.0.0.1:7897"' >> ~/.zshrc
source ~/.zshrc

需要注意的是,永久设置后,所有读取这些变量的程序都会尝试走代理。代理客户端没有运行时,这些程序会连接失败,所以关闭代理客户端时记得同时想到这一点。如果只想让某个项目走代理,更稳妥的做法是在项目启动脚本里设置变量,或者在代码中显式传入代理地址。

在 VS Code 等编辑器的内置终端中运行脚本时,终端会继承编辑器启动时的环境变量。修改用户级环境变量后,需要完全重启编辑器才能生效,只关闭终端面板是不够的。

长时间批量调用的稳定性建议

  1. 设置合理的超时:单次请求超时建议设为 60 秒左右,太短容易在生成长文本时被误判为失败;
  2. 加入退避重试:遇到超时或 5xx 错误时,等待几秒后重试,且每次等待时间逐渐加长;
  3. 区分错误类型:地区错误和 Key 无效属于配置问题,重试没有意义,应直接停止并检查;
  4. 记录日志:保存每次请求的时间、状态码和错误信息,出问题时能快速判断是网络还是配额;
  5. 选择低丢包线路:流式输出期间丢包会导致连接中断,思路与 Claude Code 网络环境配置 相同。

注意事项

  • API Key 只放环境变量:不要写进代码、不要提交到仓库,泄露后立即删除重建;
  • 固定节点:批量调用期间不要让客户端自动切换节点,否则出口地区变化可能导致请求失败;
  • 命令行工具同理:Gemini CLI 等工具的代理设置思路相同,见 Gemini CLI 代理设置;
  • 关于节点:本站未单独测试各品牌调用 Gemini API 的情况;Gemini 网页版在 2026 年 9 月实测可用的是二猫云、宇宙云、星岛梦,可作为地区条件的参考,长时间批量调用更应关注丢包与稳定性。

请遵守当地法律法规与服务条款,以及 Google 的 API 使用政策。

常见问题

浏览器能用 AI Studio,为什么代码调用 Gemini API 报地区不支持?

浏览器使用系统代理,而 Python、Node.js 等程序默认不读取系统代理,请求直接从本地网络发出,被识别为不支持的地区。给程序设置代理环境变量或开启 TUN 模式即可。

HTTPS_PROXY 应该写 http:// 还是 https://?

本地代理客户端提供的通常是 HTTP 代理端口,所以即使访问的是 HTTPS 接口,代理地址也写成 http://127.0.0.1:端口。写成 https:// 常会导致 TLS 握手失败。

官方 SDK 会自动读取代理环境变量吗?

以当前版本为准。Python 官方 SDK 底层的 HTTP 库一般会读取 HTTPS_PROXY;Node.js 内置 fetch 默认不读取,需要额外设置全局代理。具体行为以官方 SDK 文档为准。

调用时返回 429 是网络问题吗?

不是网络问题,而是触发了配额或频率限制。降低请求频率、加入重试间隔,或在 AI Studio 中查看当前配额。

API Key 可以写在代码里吗?

不建议。把 API Key 放在环境变量中读取,不要提交到代码仓库、截图或发给他人;一旦泄露,应立即在 AI Studio 中删除并重新创建。

本文最后更新于 。网络服务与 AI 平台政策变化较快,如发现信息过时,欢迎通过联系我们反馈。