You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios配置代理发送请求报EPROTO SSL版本号错误如何解决

Axios 配置代理请求HTTPS站点报SSL版本号错误修复

报错信息

AxiosError: write EPROTO 1C3B0000:error:0A00010B:SSL routines:ssl3_get_record:wrong version number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:355:

错误根因

原生Axios的内置代理逻辑存在缺陷,通过HTTP代理访问HTTPS目标站点时,不会自动发起CONNECT请求建立SSL隧道,而是直接将加密的HTTPS报文发送给HTTP代理端口,代理返回普通HTTP协议响应后,OpenSSL无法将HTTP报文识别为合法SSL/TLS记录,最终抛出版本号不匹配错误。

复现代码

const axios = require('axios')

axios({
    url: 'https://medal.tv',
    method:'GET',
    proxy: {
        protocol: 'http',
        host: 'xxx',
        port: 3000,
        auth: { username: 'xxx', password: 'xxx' }
    },  
}).then(e => console.log(e.data)).catch(e => console.log(e))

修复方法

优先使用手动指定HTTPS代理Agent的方案,兼容性最好:

  1. 安装依赖包
    npm install https-proxy-agent
    
  2. 改写请求逻辑,移除原有proxy配置项,替换为手动创建的代理Agent:
    const axios = require('axios')
    const { HttpsProxyAgent } = require('https-proxy-agent')
    
    // 拼接代理地址,认证信息直接写入URL即可
    const proxyAgent = new HttpsProxyAgent('http://账号:密码@代理地址:3000')
    
    axios({
        url: 'https://medal.tv',
        method: 'GET',
        httpsAgent: proxyAgent
    }).then(e => console.log(e.data)).catch(e => console.log(e))
    

其他可选方案

  • 如果你的代理服务本身监听HTTPS端口,可将原proxy配置中的protocol字段改为https,同时对应修改port为代理的HTTPS端口即可,该方案仅适用于支持HTTPS协议的代理,普通公网HTTP代理不适用。

注意事项

  • 禁止同时配置proxy字段和自定义httpsAgent,二者会产生配置冲突导致代理不生效
  • 测试环境如果出现证书校验失败问题,可在axios配置中添加rejectUnauthorized: false临时关闭证书校验,生产环境不建议使用该配置
  • 无认证的代理直接将代理地址写为http://host:port格式即可

内容的提问来源于stack exchange,提问作者Laxuzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:57:19