解决 axios 的 http 代理问题

参考:

Node 环境下 axios 的 proxy 配置 出坑攻略:https://www.jianshu.com/p/8021d8851775

在使用代理前,得先有一个代理,下面以本地的http://127.0.0.1:8101代理为例。

实际上 axios 官方也是有代理配置选项的,但实际使用过后发现并不生效

// 这样写是不生效的
import axios, { AxiosError } from 'axios'

async function test() {
    try {
        const response = await axios.get('http://xxxxx', {
            proxy: { 
                 host: '127.0.0.1',
                 port: 8101,
            },
            timeout: 30 * 1000,
        })
        console.log(response.data)
    } catch (error) {
        if (error?.isAxiosError) {
            console.error((error as AxiosError).toJSON())
            return
        }
        console.error(error)
    }
}

参考 Node 环境下 axios 的 proxy 配置 出坑攻略 的解决方案后,使用 https-proxy-agent 这个包即可

import axios, { AxiosError } from 'axios'
import HttpsProxyAgent from 'https-proxy-agent'

const httpsAgent = HttpsProxyAgent('http://127.0.0.1:8101')

async function test() {
    try {
        const response = await axios.get('http://xxxxx', {
            httpsAgent,
            proxy:false,
            timeout: 30 * 1000,
        })
        console.log(response.data)
    } catch (error) {
        if (error?.isAxiosError) {
            console.error((error as AxiosError).toJSON())
            return
        }
        console.error(error)
    }
}

这样就能正常使用代理了

附录

如果要使用 socks5 协议,只要改成使用 socks-proxy-agent包即可,例如:

import { SocksProxyAgent } from 'socks-proxy-agent'

const httpsAgent = new SocksProxyAgent(`socks5://localhost:8080`);

剩下的就都是一样的了


评论

发表回复