為什么要寫這一篇呢
因為巧合
的碰到行拢,然后通過搜索依舊讓我花費了很長的時間才解決這個問題锨咙,我相信陳舊的搜索結果一樣無法滿足即將看到這篇文章的人袄简,所以我決定幫助你們钩骇。??
為什么會有這個問題
因為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的版本
所以 -> 請?zhí)^
唯一能夠解決的方式是下面這種
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
})