Skip to content

ChatGPT Windows 客户端:创建 .env 代理配置

如果 ChatGPT Windows 客户端的本地 Codex 功能一直提示重连、请求超时,可以参考本文创建 .env 文件,指定本机代理地址。

本文以 Windows 原生运行环境为例,操作顺序是:确认代理端口 → 创建配置 → 完全退出并重启客户端 → 测试连接。

配置文件放在哪里?

默认位置是 %USERPROFILE%\.codex\.env,例如 C:\Users\你的用户名\.codex\.env。

如果你设置过 CODEX_HOME 环境变量,则使用该目录下的 .env。下面的脚本会自动选择目录,并显示实际保存位置。

这里配置的是客户端的本地 Codex 功能;不代表客户端所有功能都会使用此代理。默认配置目录可参考 OpenAI 官方 Windows 文档,本文的代理配置脚本参考本站提供的 w-c-p.txt。

第一步:确认代理软件和端口

  1. 打开你正在使用的代理软件,选择可以正常使用的节点,并保持软件运行。
  2. 在代理软件的设置或主界面中,找到本地 HTTP 端口或 Mixed(混合)端口。
  3. 记下端口号,后面选择对应的脚本预设。

按实际端口选择预设

本文提供 10808 和 7890 两个端口预设,并不代表所有软件都使用这两个端口。请确认该端口支持 HTTP 代理;不要填写仅支持 SOCKS 的端口、订阅地址或节点服务器端口。

例如,下面这张 Clash for Windows 截图的 General → Port 显示为 7890,使用这个配置时就应选择下面的 7890 端口标签页。其他软件或版本的界面可能不同,以你电脑上显示的 HTTP / Mixed 端口为准。

Clash for Windows 的 General 页面,Port 显示为 7890

第二步:用 PowerShell 创建 .env(推荐)

打开 PowerShell

按下 Win + R,输入下面的命令,按回车:

powershell

使用当前登录用户打开普通 PowerShell 即可,无需管理员权限。请不要在 CMD(命令提示符)中执行下面的脚本。

复制并执行脚本

按实际 HTTP / Mixed 端口选择下面的标签页,点击代码块右侧的复制按钮,将整段脚本粘贴到 PowerShell 中,按回车执行。两个预设只需选一个执行。

如果实际端口既不是 10808,也不是 7890,请先将任意一份脚本复制到记事本,把开头 $port = 后的数字改成实际端口,再将修改后的整段脚本复制到 PowerShell 中执行。

& {
    $ErrorActionPreference = 'Stop'
    $port = 10808

    # 优先使用 CODEX_HOME,否则使用当前用户的 .codex 目录
    $configDir = if ([string]::IsNullOrWhiteSpace($env:CODEX_HOME)) {
        Join-Path $env:USERPROFILE '.codex'
    } else {
        $env:CODEX_HOME
    }

    $configDir = [IO.Path]::GetFullPath($configDir)
    $file = Join-Path $configDir '.env'
    $proxy = "http://127.0.0.1:$port"

    New-Item -ItemType Directory -Path $configDir -Force |
        Out-Null

    # 读取并备份已有文件
    $lines = @()
    $backup = $null
    if (Test-Path -LiteralPath $file) {
        if (-not (Test-Path -LiteralPath $file -PathType Leaf)) {
            throw "$file 不是普通文件,请检查。"
        }

        $lines = [IO.File]::ReadAllLines($file)
        $backup = "$file.bak-$([guid]::NewGuid().ToString('N'))"
        Copy-Item -LiteralPath $file -Destination $backup
    }

    # 保留其他内容,替换这三个代理变量,避免重复
    $content = @(
        $lines | Where-Object {
            $_ -notmatch '^\s*(?:export\s+)?(?:HTTP_PROXY|HTTPS_PROXY|NO_PROXY)\s*='
        }
    ) + @(
        "HTTP_PROXY=$proxy"
        "HTTPS_PROXY=$proxy"
        'NO_PROXY=localhost,127.0.0.1,::1'
    )

    # 保存为 UTF-8,无 BOM
    $encoding = New-Object System.Text.UTF8Encoding($false)
    [IO.File]::WriteAllLines($file, [string[]]$content, $encoding)

    Write-Host "`n代理配置已保存!" -ForegroundColor Green
    Write-Host "配置文件:$file"
    Write-Host "代理地址:$proxy"
    if ($backup) {
        Write-Host "原文件备份:$backup"
    }
    Write-Host "`n请保存工作,完全退出 ChatGPT 客户端(包括托盘),然后重新打开。"
}
& {
    $ErrorActionPreference = 'Stop'
    $port = 7890

    # 优先使用 CODEX_HOME,否则使用当前用户的 .codex 目录
    $configDir = if ([string]::IsNullOrWhiteSpace($env:CODEX_HOME)) {
        Join-Path $env:USERPROFILE '.codex'
    } else {
        $env:CODEX_HOME
    }

    $configDir = [IO.Path]::GetFullPath($configDir)
    $file = Join-Path $configDir '.env'
    $proxy = "http://127.0.0.1:$port"

    New-Item -ItemType Directory -Path $configDir -Force |
        Out-Null

    # 读取并备份已有文件
    $lines = @()
    $backup = $null
    if (Test-Path -LiteralPath $file) {
        if (-not (Test-Path -LiteralPath $file -PathType Leaf)) {
            throw "$file 不是普通文件,请检查。"
        }

        $lines = [IO.File]::ReadAllLines($file)
        $backup = "$file.bak-$([guid]::NewGuid().ToString('N'))"
        Copy-Item -LiteralPath $file -Destination $backup
    }

    # 保留其他内容,替换这三个代理变量,避免重复
    $content = @(
        $lines | Where-Object {
            $_ -notmatch '^\s*(?:export\s+)?(?:HTTP_PROXY|HTTPS_PROXY|NO_PROXY)\s*='
        }
    ) + @(
        "HTTP_PROXY=$proxy"
        "HTTPS_PROXY=$proxy"
        'NO_PROXY=localhost,127.0.0.1,::1'
    )

    # 保存为 UTF-8,无 BOM
    $encoding = New-Object System.Text.UTF8Encoding($false)
    [IO.File]::WriteAllLines($file, [string[]]$content, $encoding)

    Write-Host "`n代理配置已保存!" -ForegroundColor Green
    Write-Host "配置文件:$file"
    Write-Host "代理地址:$proxy"
    if ($backup) {
        Write-Host "原文件备份:$backup"
    }
    Write-Host "`n请保存工作,完全退出 ChatGPT 客户端(包括托盘),然后重新打开。"
}

脚本会自动创建文件夹和 .env。如果文件已经存在,会先备份原文件,再替换 HTTP_PROXY、HTTPS_PROXY、NO_PROXY 三项,保留其他内容。重复执行也不会重复追加这三项。

检查执行结果

成功后会看到类似输出(以下以 10808 预设为例;选择 7890 预设时,输出中的端口为 7890,用户名和路径以你的电脑为准):

代理配置已保存!
配置文件:C:\Users\你的用户名\.codex\.env
代理地址:http://127.0.0.1:10808

如果原来就有 .env,还会显示 原文件备份:,备份文件名为 .env.bak-一串字符。请保留它,方便需要时恢复。

在文件资源管理器地址栏中输入输出里的配置文件所在文件夹路径,例如 C:\Users\你的用户名\.codex,按回车。用记事本打开 .env,确认包含下面三行(端口以你实际填写的为准):

HTTP_PROXY=http://127.0.0.1:10808
HTTPS_PROXY=http://127.0.0.1:10808
NO_PROXY=localhost,127.0.0.1,::1

HTTP_PROXY 和 HTTPS_PROXY 都指向本机 HTTP 代理,因此两行地址都以 http:// 开头。NO_PROXY 表示访问这些本机地址时不使用代理。

第三步:完全退出并重启客户端

  1. 保存客户端中正在进行的工作。
  2. 完全退出 ChatGPT 客户端。如果任务栏右下角的托盘中还有图标,右键点击并选择退出;仅关闭窗口可能还会留在后台。
  3. 保持代理软件运行,重新打开 ChatGPT 客户端。
  4. 新建一个本地 Codex 任务,发送一句简单的测试消息,检查是否能够正常回复、不再持续重连。

文件保存成功不等于连接一定正常

脚本只负责写入配置,不会测试端口、节点或客户端连接。如果仍然超时,请查看文末的排错说明。

可选:用记事本手动创建 .env

如果已经成功运行脚本并检查了结果,可以跳过这一节。

打开配置目录

如果没有设置过 CODEX_HOME,按下 Win + R,输入 %USERPROFILE%,按回车。在打开的用户文件夹里找到 .codex;没有就新建一个名为 .codex 的文件夹,然后打开。

如果设置过 CODEX_HOME,应打开它指向的目录,而不是另外在默认目录创建文件。你可以在 PowerShell 中输入下面的命令查看它的值;没有输出表示当前 PowerShell 未设置此变量:

$env:CODEX_HOME

编辑并保存文件

  1. 在资源管理器中开启 查看 → 显示 → 文件扩展名;Windows 10 通常在“查看”选项卡中勾选“文件扩展名”。如果找不到已有 .env,同时开启“隐藏的项目”。
  2. 如果已有 .env,先复制一份作为备份,再用记事本打开原文件;如果没有,打开记事本新建文档。
  3. 添加下面三行,把两处 10808 都改成实际 HTTP / Mixed 端口。已有同名配置时替换原行,每项只保留一行,其他配置保留。
HTTP_PROXY=http://127.0.0.1:10808
HTTPS_PROXY=http://127.0.0.1:10808
NO_PROXY=localhost,127.0.0.1,::1
  1. 点击 文件 → 另存为,选择前面打开的配置目录。
  2. 文件名填写 .env,保存类型选择“所有文件”,编码选择 UTF-8(无 BOM,不选“UTF-8 带 BOM”),点击保存。已有文件时确认替换前先检查是否做好备份。
  3. 回到资源管理器,确认完整文件名是 .env,不是 .env.txt,也不是 .env.env。如果保存成了 .env.txt,在显示文件扩展名后将它重命名为 .env。
  4. 按照上文“第三步”完全退出并重启客户端,测试连接。

常见问题

PowerShell 显示红色报错

确认运行窗口是 PowerShell,并且复制了从 & { 到最后一个 } 的完整脚本。如果端口需要修改,只修改 $port = 后的数字,再重新复制执行。

如果提示 .env 不是普通文件,检查目标目录里是否有误建的同名文件夹。先将该文件夹改名并保留,再重新执行脚本。

提示保存成功,但客户端仍然重连或超时

依次检查:

  1. 代理软件是否仍在运行,当前节点是否可用。
  2. .env 中的端口是否与代理软件实际的 HTTP / Mixed 端口一致,是否误填了仅支持 SOCKS 的端口。
  3. 是否只关闭了客户端窗口;请从托盘完全退出,再重新打开。
  4. 文件名是否准确为 .env,文件是否位于正确目录。设置过 CODEX_HOME 时,以脚本输出的实际路径为准,并确保 PowerShell 和客户端使用同一个用户及相同的 CODEX_HOME 设置。

本文以 Windows 原生本地环境为例;如果任务运行在 WSL、SSH 主机或云端,还需要检查对应运行环境的网络配置。

后来更换了代理软件或端口

将脚本中的 $port 改成新软件的 HTTP / Mixed 端口后重新执行,再完全退出并重启 ChatGPT 客户端。脚本会再次备份已有文件并更新这三项。

如何恢复修改前的配置?

先保存工作并完全退出 ChatGPT 客户端,然后打开脚本输出的配置文件夹。

  • 如果脚本生成了备份:先把当前 .env 改名保存,例如 .env.before-restore;再复制执行前对应的 .env.bak-一串字符,把复制出的文件重命名为 .env。如果多次运行过脚本,请按修改时间选择所需备份。
  • 如果原来没有 .env:可以用记事本删除本文添加的三行代理配置并保存;如果文件只有这三行,也可以先将它改名保存为 .env.disabled。
  • 如果使用手动方法:用事先保留的备份恢复原文件。

完成后重新打开客户端。