惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
S
Schneier on Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
T
Tenable Blog
I
Intezer
T
Threat Research - Cisco Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
P
Privacy International News Feed
P
Palo Alto Networks Blog
The Register - Security
The Register - Security
IT之家
IT之家
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
S
Securelist
WordPress大学
WordPress大学
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hugging Face - Blog
Hugging Face - Blog
N
News and Events Feed by Topic
H
Help Net Security
Project Zero
Project Zero
K
Kaspersky official blog
博客园 - 三生石上(FineUI控件)
L
LINUX DO - 热门话题
大猫的无限游戏
大猫的无限游戏
G
GRAHAM CLULEY
F
Full Disclosure
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
TaoSecurity Blog
TaoSecurity Blog
N
News | PayPal Newsroom
Forbes - Security
Forbes - Security
博客园 - 司徒正美
I
InfoQ
Recent Announcements
Recent Announcements
Attack and Defense Labs
Attack and Defense Labs
P
Privacy & Cybersecurity Law Blog
S
Security @ Cisco Blogs
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Simon Willison's Weblog
Simon Willison's Weblog
G
Google Developers Blog
N
Netflix TechBlog - Medium
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志

唐巧的博客

如何写一篇 AI 味很重的文章 黑洞健身的进化 — AI 时代的一人 App 理解 Skill —— 读《图解 Skill》 玩教具行业的核心竞争力 更换搬瓦工 VPS IP 我不小心开了 273 个 Agent Rebase Hacker House 见闻 北京四环骑行一日游:69 公里 6 小时 了解 Claude Code 的提示词工程 从 Sublime Text 到 Zed HyperFrames 实战:用 HTML 写一支 41 秒的产品介绍视频 安庆之旅 Agent Loop 简介 在 Github 中通过创建 issue 来唤醒 claude 工作 让 Claude Code 在你睡觉时持续运行:完整实战指南 Claude Code 从 AWS Bedrock 切换到 Team 订阅指南 写给设计师:如何设计一份 AI 友好的设计规范 OpenClaw Memory Wiki 技术文档 利用 AI Agent, 将域名从 Godaddy 迁移到 Cloudflare AI 干活的三件套:CLI、MCP 和 Skill 到底是什么? 大家好,我是唐巧的龙虾 运动的科学原理与健康价值 - 读《锻炼》 WebRTC IP 泄露问题 OpenClaw 学习笔记 读《控糖革命》 理财学习笔记(2):不懂不投 理财学习笔记(1):每个人必须自己懂理财 CSPJ 教学思考:背包问题 2025 年个人总结 读《疯狂的尿酸》 和媒体共赢 - 读《广告的没落,公关的崛起》 理解 MCP -读《这就是 MCP》 斑马思维机的详细调研 理解大语言模型 - 读《图解 DeepSeek 技术》 但斌投资札记-读《时间的玫瑰》 投机与趋势投资 - 读《股票大作手操盘术》 我理解的保险产品
用 CLIProxyAPI 把 Codex 变成一个 OpenAI 兼容的 API 服务
唐巧 · 2026-07-12 · via 唐巧的博客

平台:macOS(Apple Silicon / Homebrew)· 版本:CLIProxyAPI 7.2.65

如果你手上有 ChatGPT/Codex 的订阅账号,却想在自己的脚本、IDE 插件或第三方工具里以「标准 OpenAI API」的方式调用它,CLIProxyAPI 就是干这件事的。它能把 Gemini CLI、Codex、Claude Code、Qwen Code 这类基于 OAuth 登录的 CLI 工具,统一包装成一个本地的、OpenAI 兼容的 HTTP 服务。

本文记录一次真实的安装与配置过程:从 brew install 到登录 Codex,再到起服务、验证,最后还踩了一个 Surge 代理拦截本地请求 的坑。


一、安装

1
brew install cliproxyapi

安装完成后,几个关键路径值得记一下(Apple Silicon 下的默认位置):

项目 路径
可执行文件 /opt/homebrew/bin/cliproxyapi
配置文件 /opt/homebrew/etc/cliproxyapi.conf
认证目录(存放 OAuth token) ~/.cli-proxy-api
默认监听端口 8317

看一下它支持哪些登录方式:

1
cliproxyapi --help

输出里能看到一堆 -xxx-login 选项,我们关心的是这两个:

1
2
-codex-login          Login to Codex using OAuth
-codex-device-login Login to Codex using device code flow

二、登录 Codex

这是整个流程的核心。直接运行:

1
cliproxyapi -codex-login

它会:

  1. 自动读取默认配置 /opt/homebrew/etc/cliproxyapi.conf,把 token 存到 ~/.cli-proxy-api
  2. 自动打开浏览器,跳转到 OpenAI/ChatGPT 的 OAuth 授权页(回调端口是 1455,确保没被占用);
  3. 你用 拥有 ChatGPT 付费订阅(Plus/Pro/Team)的账号 登录并授权;
  4. 授权成功后,token 落盘到认证目录。

登录成功后,你会在认证目录里看到一个以账号命名的 JSON 文件:

1
2
$ ls -la ~/.cli-proxy-api
-rw-r--r-- 1 you staff 4152 codex-你的账号@xxx.com-pro.json

没有图形界面 / 远程服务器? 改用设备码流程或禁止自动开浏览器:

1
2
cliproxyapi -codex-device-login     
cliproxyapi -codex-login -no-browser

三、配置访问密钥

打开配置文件 /opt/homebrew/etc/cliproxyapi.conf,默认的 api-keys 是一组占位符:

1
2
3
4
api-keys:
- "your-api-key-1"
- "your-api-key-2"
- "your-api-key-3"

这是客户端调用你这个代理时要携带的密钥(Bearer Token),和上面的 Codex 登录是两码事。建议换成你自己的一个强随机值。生成一个:

1
echo "sk-$(openssl rand -hex 24)"

然后把配置改成(只保留你需要的即可):

1
2
api-keys:
- "sk-你生成的随机字符串"

配置文件里其它值得留意的字段:

1
2
3
4
port: 8317                      
auth-dir: "~/.cli-proxy-api"
proxy-url: ""
debug: false

四、启动服务

用 Homebrew 的 services 管理,后台常驻 + 开机自启:

1
brew services start cliproxyapi

确认状态和端口:

1
2
brew services list | grep cliproxy      
lsof -iTCP:8317 -sTCP:LISTEN

如果只想临时前台运行、方便看日志,直接跑 cliproxyapi 即可。


五、验证

服务地址是 http://127.0.0.1:8317/v1,接口是 OpenAI 兼容格式

1. 列出模型

1
2
3
KEY="sk-你的密钥"
curl http://127.0.0.1:8317/v1/models \
-H "Authorization: Bearer $KEY"

能返回一批模型(Codex 账号可用的 gpt-5.x 系列,如 gpt-5.5gpt-5.4gpt-5.4-minigpt-5.3-codex-sparkcodex-auto-review 等)就说明 token 生效了。

2. 发一次真实对话(端到端验证)

1
2
3
4
5
6
7
curl http://127.0.0.1:8317/v1/chat/completions \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.5",
"messages": [{"role": "user", "content": "reply with exactly: ok"}]
}'

拿到类似下面的响应(content: "ok"usage 有计费),就彻底打通了:

1
2
3
4
5
{
"model": "gpt-5.5",
"choices": [{"message": {"role": "assistant", "content": "ok"}, "finish_reason": "stop"}],
"usage": {"prompt_tokens": 307, "completion_tokens": 15, "total_tokens": 322}
}

六、踩坑:Surge(或其它系统代理)会拦截本地请求

第一次 curl 验证时,我拿到的不是 JSON,而是一个 Surge 的错误页

1
2
3
<h1>Connection Closed</h1>
访问的 URL 不可用: http://localhost:8317/v1/models
Policy: Reality · 错误描述:Read stream EOF

原因:系统里开着 Surgecurl 默认走了系统代理,发往 localhost:8317 的请求被 Surge 拦下并试图代理,结果失败。

临时绕过(命令行直连本地):

1
curl --noproxy '*' http://127.0.0.1:8317/v1/models -H "Authorization: Bearer $KEY"

长期解决(在 Surge 配置里让本地环回直连)——把这条规则放在 [Rule]靠前位置:

1
2
[Rule]
IP-CIDR,127.0.0.0/8,DIRECT,no-resolve

几点说明:

  • 127.0.0.0/8 是整个环回段(IANA 保留),全部直连安全,涵盖 127.0.0.1
  • no-resolve 表示匹配这条规则时不做 DNS 解析,只对 IP 字面量请求生效——正好对应我们用 127.0.0.1 直连的场景,还能避免为域名请求触发多余解析;
  • Surge 自上而下、首个命中生效,所以要放前面。

⚠️ 注意:因为加了 no-resolve,这条规则不匹配 localhost 这个主机名。如果你习惯用 http://localhost:8317,再补一条:

1
DOMAIN,localhost,DIRECT

改完重载 Surge 配置后,curl 就不用再加 --noproxy '*' 了。


七、接入客户端

由于是 OpenAI 兼容接口,绝大多数支持自定义 base_url 的工具都能直接接:

1
2
export OPENAI_API_KEY="sk-你的密钥"
export OPENAI_BASE_URL="http://127.0.0.1:8317/v1"

Python SDK 示例:

1
2
3
4
5
6
7
8
9
10
11
12
from openai import OpenAI

client = OpenAI(
api_key="sk-你的密钥",
base_url="http://127.0.0.1:8317/v1",
)

resp = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

八、常用管理命令

1
2
3
4
brew services restart cliproxyapi   
brew services stop cliproxyapi
cliproxyapi -codex-login
cliproxyapi --help

小结

整套流程其实很短:

  1. brew install cliproxyapi
  2. cliproxyapi -codex-login 登录 Codex
  3. 改配置里的 api-keys
  4. brew services start cliproxyapi 起服务
  5. curl 验证

唯一容易卡住的地方,是本机开着 Surge 这类代理时,本地请求会被拦——一条 IP-CIDR,127.0.0.0/8,DIRECT,no-resolve 规则即可解决。之后,你就有了一个本地的、OpenAI 兼容的 Codex 网关,可以接到任何认 base_url 的工具里。