Node|Node 环境下 axios 的proxy配置 出坑攻略
为什么要写这一篇呢
因为巧合
的碰到,然后通过搜索依旧让我花费了很长的时间才解决这个问题,我相信陈旧的搜索结果一样无法满足即将看到这篇文章的人,所以我决定帮助你们。
为什么会有这个问题
因为axios的请求默认并没有使用本机的代理设置
,所以那些需要通过代理的接口并不能正常访问,返回结果就是你Timeout设置有多长,它就停顿有多久。其实你可以通过request、http 等库很简单的跳过这个问题,因为他们的配置方式所搜即所得。
为什么还要死磕axios这个问题
没有放弃转从而转向使用其它库,那是因为axios 的功能很全面
,promise的集成很自然
,还有各种钩子函数
提供,避免了自己使用较原始的库进行手动封装的不必要劳力付出
目前解决方案的入坑点
node-tunnel
const axios = require('axios')
const tunnel = require('tunnel')const tunnelProxy = tunnel.httpsOverHttp({
proxy: {
host: 'you_host',
port: 'you_port',
},
});
axios(url,{
proxy: false,
httpsAgent: tunnelProxy,
})
错误信息
tunneling socket could not be established, cause=Hostname/IP does not
match certificate's altnames一个最后一次commit为 2018-09-11且最终到0.0.6版本的库是不值得信赖的,
当你看到这种方式的时候请直接跳过
axios-https-proxy-fix
const axios = require('axios-https-proxy-fix')axios(url,{
proxy: {
host: '127.0.0.1',
port: '1080'
},
timeout: 10000
})
安装使用方式很简单,但该库并没有随着axios变更同步更新,停留在了0.17.1的版本
所以 -> 请跳过
唯一能够解决的方式是下面这种 host是如果是本机那就是127.0.0.1,至于端口取决你的代理设置
注意,添加上httpsAgent的时候,需要设置 proxy 为 false,这一点很重要
const axios = require("axios");
const HttpsProxyAgent = require("https-proxy-agent");
//
const httpsAgent = new HttpsProxyAgent(`http://${YOUR_HOST}:${YOUR_PORT}`);
const axios = Axios.create({
proxy:false,
httpsAgent
})
【Node|Node 环境下 axios 的proxy配置 出坑攻略】Issue 参考链接
推荐阅读
- 开学第一天(下)
- 【故障公告】周五下午的一次突发故障
- 人生感悟记#环境仪器宋庆国成长记#072
- 生活随笔|好天气下的意外之喜
- MongoDB,Wondows下免安装版|MongoDB,Wondows下免安装版 (简化版操作)
- 汇讲-勇于突破
- Android中的AES加密-下
- 说的真好
- 六步搭建ES6语法环境
- 放下心中的偶像包袱吧