pre-commit run --all-files 报错:http.client.RemoteDisconnected

报错完整信息

初步原因是这样

报错是 Python 的 http.client.RemoteDisconnected,意思是 在用 urllib 请求远程 URL 时,远程服务器直接断开了连接,没有返回任何响应。在你的堆栈里,它出现在 pre-commit 尝试安装 Golang 环境的时候,也就是这一行:

复制代码
resp = urllib.request.urlopen(_get_url(version))

也就是说 pre-commit 想下载 Go 的某个版本,但连接远程服务器失败了

详细原因如下

本人电脑的环境是ubantu22.04,代理软件是v2ray。

由于v2ray的代理协议是socks5,而urllib 请求远程 URL走的是http协议,不支持socks5协议。

解决办法如下

使用privoxy工具,它的作用是将http协议的消息转为socks5协议的消息

具体工作流如下

  • 应用程序 → HTTP请求 → Privoxy (8123端口)

  • Privoxy → 转换协议 → SOCKS5请求 → V2Ray (1080端口)

  • V2Ray → 处理请求 → 目标网站

  • 目标网站 → 响应 → V2Ray → Privoxy → 应用程序

具体操作如下

第一步:编辑配置文件:

bash 复制代码
sudo nano /etc/privoxy/config

在配置文件中,找到或添加以下两行,确保它们没有被注释掉(行首没有 #):

bash 复制代码
listen-address 127.0.0.1:8123
forward-socks5t / 127.0.0.1:1080 .

将你的V2Ray_SOCKS5端口替换为你V2Ray配置中inbounds协议为socks的端口号(例如 1080)。注意:forward-socks5t 行末尾有一个点号.和空格,不要遗漏。

第二步:启动Privoxy服务并设置开机自启:

bash 复制代码
sudo systemctl start privoxy
sudo systemctl enable privoxy
sudo systemctl status privoxy # 检查状态,确保其为active (running)

第三步:设置环境变量,使用Privoxy的HTTP代理

bash 复制代码
export http_proxy="http://127.0.0.1:8123"
export https_proxy="http://127.0.0.1:8123"

为了长期使用,可添加到~/.bashrc文件的末尾

第四步:为防止DNS污染,也就是本地DNS解析不了国外的网站的ip。可在/etc/hosts文件中注明网站的ip

以golang官网为例

bash 复制代码
173.194.75.141 golang.org
216.58.200.238 golang.org

大功告成(如果还是出现上述报错,就再运行一次pre-commit run --all-files,这可能是网络代理的网络稳定性有关系)

相关推荐
寻星探路2 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
王达舒19942 小时前
HTTP vs HTTPS: 终极解析,保护你的数据究竟有多重要?
网络协议·http·https
朱皮皮呀2 小时前
HTTPS的工作过程
网络协议·http·https
Binary-Jeff2 小时前
一文读懂 HTTPS 协议及其工作流程
网络协议·web安全·http·https
盟接之桥5 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
会员源码网6 小时前
理财源码开发:单语言深耕还是多语言融合?看完这篇不踩坑
网络·个人开发
米羊1216 小时前
已有安全措施确认(上)
大数据·网络
ManThink Technology7 小时前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络
珠海西格电力科技8 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
QT.qtqtqtqtqt8 小时前
未授权访问漏洞
网络·安全·web安全