本文作者:icy

Golang-COW:让终端也能优雅上网的 HTTP 代理

icy 昨天 13 抢沙发
Golang-COW:让终端也能优雅上网的 HTTP 代理摘要: COW:让终端也能优雅上网的 HTTP 代理 项目地址:https://github.com/cyfdecyf/cow 在命令行里折腾 curl、go get、git clone...

Golang-COW:让终端也能优雅上网的 HTTP 代理

COW:让终端也能优雅上网的 HTTP 代理

项目地址:https://github.com/cyfdecyf/cow

在命令行里折腾 curl、go get、git clone 的时候,最让人崩溃的往往不是报错,而是卡在下载那一行不动。浏览器里有各种代理插件帮你分流,可终端程序大多只认 http_proxy 环境变量——一旦设置,所有流量都得走代理,国内站点也跟着绕道走,速度感人。

cow 就是为了解决这个痛点诞生的。它用 Go 写的一个 HTTP 代理,核心卖点是能自动区分哪些请求该走代理、哪些该直连,而且配置起来非常省心。

COW 是什么

cow(climb over the wall 的缩写)是一个轻量级的 HTTP 代理服务器。它不像 ss/v2ray 那样需要远端服务器配合,而是自己跑在本地,帮你做「智能分流」。

它的工作模型很朴素:

  • 在本地起一个 HTTP 代理端口(默认 7777)
  • 你让终端程序把 HTTP 请求发给它
  • 它判断这个请求的目标域名,该走代理的转发到上游代理,该直连的直接连

所以它本质上是一个「本地代理前置 + 分流决策」的角色,真正的翻墙能力来自你已经在用的上游代理(比如另一个 ss 的 HTTP 端口、公司的出口代理等)。

核心特性

1. 智能分流,无需手动维护规则

这是 cow 最有价值的地方。它的分流策略是有状态、自学习的:

  • 第一次遇到某个域名时,会按默认策略处理(先直连,失败就降级走代理,或者反过来)
  • 一旦某个域名直连失败,它会记住这个决定,之后同名域名直接走代理
  • 反过来,某个域名直连一直成功,它也倾向于保持直连

这种「试错 + 记忆」的机制意味着你几乎不用写规则,用它跑一段时间,访问过的站点分流结果就会自动收敛到合理的状态。比起 PAC 文件里手动维护一长串域名列表,体验好太多。

2. 纯 Go 实现,单文件部署

编译出来就是一个可执行文件,没有运行时依赖。丢到 /usr/local/bin 或者某个 PATH 目录就能用,nohup 一挂就完事。对于不想折腾容器、不想配置 systemd 服务的人来说,心智负担极低。

3. 配置简单

默认配置文件在 ~/.cow/rc,你只需要告诉它两件事:

  • 本地监听哪个端口
  • 上游代理是谁

一个最小的配置大概长这样:

conf
# 监听地址
listen = http://127.0.0.1:7777

# 上游代理(假设你本地 ss 的 HTTP 端口是 1087)
proxy = http://127.0.0.1:1087

就这样,cow 就会对需要代理的站点自动走 1087,其余的直连。

4. 支持 DIRECT / PROXY 显式规则

虽然主打自动分流,但 cow 同样支持显式的规则配置,比如:

conf
# 强制直连
direct = *.cn
direct = *.taobao.com
direct = 10.0.0.0/8

# 强制走代理
proxy = *.google.com
proxy = *.github.com

正则也支持,需要精确控制的时候都能覆盖。

5. 处理了「免代理 502」这类细节

写代理工具的人都知道,很多程序只认 http_proxy,一设置就把所有请求都塞过去。cow 会在内部对目标做判断,不该代理的请求自己直接转发,所以即使你全局设置了 http_proxy=http://127.0.0.1:7777,访问国内站点也不会变慢。

上手流程

Bash
# 1. 安装(Go 环境)
go install github.com/cyfdecyf/cow@latest

# 或者直接下载 release 二进制

# 2. 写配置
mkdir -p ~/.cow
cat > ~/.cow/rc <<'EOF'
listen = http://127.0.0.1:7777
proxy = http://127.0.0.1:1087
EOF

# 3. 启动
cow

# 4. 让终端走代理
export http_proxy=http://127.0.0.1:7777
export https_proxy=http://127.0.0.1:7777

# 5. 验证
curl -I https://www.google.com   # 应该走代理
curl -I https://www.baidu.com    # 应该直连

跑几天之后,你可以打开日志或者查看 ~/.cow 下的状态文件,看看它自学习出来的分流结果,基本不需要人工干预。

适合谁用

  • 重度命令行用户:天天 go get、pip install、git clone,希望终端流量自动分流
  • 不想维护 PAC 的人:懒得为一个域名列表反复调试
  • 已有上游代理的人:cow 不负责翻墙本身,它解决的是「本地智能分流」这一层

反过来,如果你需要一个开箱即用、自带远端服务器的全功能方案,那 cow 不是目标——它更像是一个本地代理的调度器,把分流这件事做得足够省心。

一点小提醒

cow 项目本身比较老,最后一次活跃提交停滞在几年前。功能上是稳定的,Go 生态也保证了它依然能编译、能跑,但如果你追求最新协议支持或者长期维护,可能需要考虑更现代的替代品。不过对于「HTTP 代理 + 智能分流」这个具体需求,cow 的设计思路至今依然是教科书级的——让工具自己学习规则,而不是让人去维护规则,这一点值得很多同类工具借鉴。

如果你手头正好有一个本地 HTTP 代理,又想优雅地让终端也享受分流,那 cow 值得花十分钟装一下。

cow_20261110181040.zip
类型:压缩文件|已下载:0|下载方式:免费下载
立即下载
文章版权及转载声明

作者:icy本文地址:https://zelig.cn/golang/1491.html发布于 昨天
文章转载或复制请以超链接形式并注明出处软角落-SoftNook

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

评论列表 (暂无评论,13人围观)参与讨论

还没有评论,来说两句吧...