本 Axios 代理指南涵盖以下主题:
- 为何要在 Axios 中使用代理。
- 如何在 Axios 中设置 HTTP、HTTPS 或 SOCKS 代理。
- 如何进行身份验证和代理轮换。
Axios 是什么以及为何需要代理?
Axios 是 JavaScript 生态系统中使用最广泛的 HTTP 客户端之一。它提供一个基于 Promise 的、方便易用且直观的 API,用于执行 HTTP 请求和处理自定义标头、配置和 Cookie。
为何需要在 Axios 中使用代理?原因很简单!通过代理路由您的请求,您就可以掩盖自己的 IP 地址,使目标服务器更难识别和屏蔽您。这一额外的隐私保护层有助于维护应用程序的完整性,并避免 IP 禁令或限制。如我们在 node-fetch 代理指南中所述,您可使用 Fetch 获得相同的结果。
在 Axios 中使用代理
本 axios 代理章节介绍了在 Axios 中设置 HTTP、HTTPS 或 SOCKS 代理的具体操作方法。
前提
首先,确保您已安装 axios
npm 包。通过以下命令将其添加至项目的依赖项中:
npm install axios
在 Node.js 中,Axios 可通过代理
配置原生支持 HTTP 和 HTTPS 代理。因此,如果您想在 Node.js 应用程序中通过 Axios 使用 HTTP/HTTPS 代理,那随时可使用它们!
如果您想改用非 HTTP/S 代理,则需要依赖委托代理 (Proxy Agent) 项目。它提供了 Http.Agent 实现,可以将 Axios 与不同协议类型的代理集成在一起。具体来说,按协议进行分类的话,该项目公开的各种 NPM 库包括:
- HTTP 和 HTTPS 代理:
https-proxy-agent
- SOCKS、SOCKS5 和 SOCKS4:
socks-proxy-agent
- PAC-*:pac-proxy-agent
太棒了!您已准备就绪,可以在 Axios 中设置代理了!
HTTP/HTTPS 代理
您的 HTTP/HTTPS 代理的 URL 应该是这样的:
"<PROXY_PROTOCOL>://<PROXY_HOST>:<PROXY_PORT>"
对于 HTTP 代理,
例如,假设这是您的 HTTP 代理的 URL:
"http://47.88.62.42:80"
您可在 Axios 中按下述方法设置该代理:
axios.get(targetURL, {
proxy: {
protocol: "http",
host: "48.88.62.42",
port: "80"
}
})
如您所见,本质而言,就是将代理 URL 分成两部分,并在代理配置中正确指定它们。Axios 现在将通过指定的 HTTP 代理服务器向作为参数传递的 URL 发出请求。
让我们来验证一下,上述 Axios 代理方法是否有效!
在线检索免费的 HTTP 或 HTTPS 代理服务器 URL。例如,这个免费的代理服务器 URL:
Protocol: HTTP; IP Address: 52.117.157.155; Port: 8002
完整的代理 URL 应为 “http://52.117.157.155:8002”。
要验证此代理能否正常运行,您可在 HTTPBin 项目中指定 /ip 端点。因为该公共 API 返回的是传入请求的 IP,所以它应该返回代理服务器的 IP。
Node.js 脚本片段应为:
import axios from "axios"
async function testProxy() {
// perform the desired request through the HTTP proxy
const response = axios.get("https://httpbin.io/ip", {
proxy: {
protocol: "http",
host: "52.117.157.155",
port: "8002"
}
})
// print the result
console.log(response.data)
}
testProxy()
执行脚本后它应记录:
{ "origin": "52.117.157.155" }
这与代理服务器的 IP 相同,表示代理服务器能正常运行,您的 IP 是安全的!
遗憾的是,如果您真的去运行这个脚本,将无法获得同样的结果。具体来说,它会出错。为什么呢?因为免费代理不但时效短,还不可靠!您可出于学习目的使用它们,但不能在实际场景中依赖它们。
警告:免费代理服务不可靠、速度慢、出错率高、时效短且会收集大量的用户数据。千万要避开他们!
有何解决方案?使用市面上最好的代理服务提供商 Bright Data 的高级代理 。订阅并免费试用我们可靠的代理。
SOCKS 代理
如您尝试在代理配置对象的协议字段中设置 “socks” 字符串,则会出现以下错误:
AssertionError [ERR_ASSERTION]: protocol mismatch
// ...
{
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 'dada:',
expected: 'http:',
operator: '=='
}
这是因为 Axios 本身不支持 SOCKS 代理。因此,您需要额外的依赖项才能实现预期的结果。
使用以下命令将 socks-proxy-agent
npm 库添加到项目的依赖项中:
npm install socks-proxy-agent
这个包可以让您在 Axios 中发出 HTTP 或 HTTPS 请求后连接到 SOCKS 代理服务器。
然后,从库中导入 SOCKS 委托代理 (Proxy Agent) 实现:
const SocksProxyAgent = require("socks-proxy-agent")
或者,如果您是 ESM 用户:
import { SocksProxyAgent } from "socks-proxy-agent"
假设这是您的 SOCKS 代理 URL:
"socks://183.88.74.73:4153"
请注意,代理协议可以是以下值之一:“socks”、“socks5”、“socks4”。
将其存储在变量中并传递给 socksProxyAgent
构造函数:
const proxyURL = "socks://183.88.74.73:4153"
const proxyAgent = new SocksProxyAgent(proxyURL)
socksProxyAgent ()
会初始化 HTTP.Agent
实例,以通过代理 URL 执行 HTTP/HTTPS 请求。
您现在可以在 Axios 中使用 SOCKS 代理了(如下所示):
axios.get(targetURL, {
httpAgent: proxyAgent,
httpsAgent: proxyAgent
})
HttpAgent 和 httpsAgent 分别定义了执行 HTTP 和 HTTPS 请求时使用的自定义代理。换言之,Axios 发出的 HTTP 或 HTTPS 请求将通过指定的 SOCKS 代理。对于 https-proxy-agent
npm 包,您也可以采用类似的操作,使之成为在 Axios 中设置 HTTP/HTTPS 代理的备选方法。
整体操作步骤如下所示:
import axios from "axios"
import { SocksProxyAgent } from "socks-proxy-agent"
async function testProxy() {
// replace with the URL of your SOCKS proxy
const proxyURL = "socks://183.88.74.73:4153"
// define the HTTP/HTTPS proxy agent
const proxyAgent = new SocksProxyAgent(proxyURL)
// perform the request via the SOCKS proxy
const response = await axios.get("https://httpbin.io/ip", {
httpAgent: proxyAgent,
httpsAgent: proxyAgent
})
// print the result
console.log(response.data) // { "origin": "183.88.74.73" }
}
testProxy()
点击链接查看如何在 Axios中配置 SOCKS 代理的其他示例。
Axios 代理:高级用例
您现在已了解 Axios 代理集成的基础知识,可以开始研究更复杂的技术了。
设置全局代理
您可以在 Axios 实例中直接指定代理来设置全局代理:
const axiosInstance = axios.create({
proxy: {
protocol: "<PROXY_PROTOCOL>",
host: "<PROXY_HOST>",
port: "<PROXY_PORT>"
},
// other configs...
})
或者,如果您是委托代理 (Proxy Agent) 的用户,则可这么操作:
// proxy Agent definition ...
const axiosInstance = axios.create({
httpAgent: proxyAgent,
httpsAgent: proxyAgent
})
现在,使用 AxiosInstance
发出的所有请求都将自动通过指定的代理。
在 Axios 中进行代理身份验证
为仅允许付费用户访问高级代理, 代理服务提供商会通过身份验证对其进行保护。在没有用户名和密码的情况下连接已经过身份验证的代理将导致 407 Proxy Authentication Required 错误。
以下是经过身份验证的代理 URL 的具体语法:
[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]
例如,在现实世界中,连接至经过身份验证的代理的 URL 可能是这样的:
http://admin:[email protected]:8391
这种情况下,代理 URL 字段应为:
- PROTOCOL>:
HTTP
:156.127.0.192
:8391
:admin
:lK4w90MEe45YIkOpk
要在 Axios 中进行代理身份验证,您只需在代理
的身份验证 (auth)
字段输入指定的用户名和密码即可:
axios.get(targetURL, {
proxy: {
protocol: "http",
host: "156.127.0.192",
port: "8381",
auth: {
username: "admin",
password: "lK4w90MEe45YIkOpk"
}
}
})
大功告成!就这么简单!
如果您是委托代理 (Proxy Agent) 的用户,则可通过两种方法进行身份验证:
- 直接在代理 URL 中添加凭据:
var proxyAgent = new SocksProxyAgent("http://admin:[email protected]:8391")
- 在 URL 对象中设置
用户名
和密码
选项:
const proxyOpts = new URL("http://156.127.0.192:8391")
proxyOpts.username = "admin"
proxyOpts.password = "lK4w90MEe45YIkOpk"
const proxyAgent = new SocksProxyAgent(proxyOpts)
上述方法同样适用于 HttpsProxyAgent。
通过环境变量设置代理
在 Axios 中全局配置代理的另一种方法是设置以下环境变量:
HTTP_PROXY
:用于 HTTP 请求的代理服务器的 URL。HTTPS_PROXY
:用于 HTTPS 请求的代理服务器的 URL。
例如,使用以下命令在 Linux 或 macOS 上设置它们:
export HTTP_PROXY = "[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]"
export HTTPS_PROXY = "[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]"
当 Axios 检测到这些环境变量时,它会从中读取相关代理设置,例如身份验证凭据。将代理
字段设置为 false
可使 Axios 忽略这些环境变量。请记住,您也可以将 NO_PROXY
环境变量定义为用逗号分隔的域名列表(表中域名均无需使用代理进行访问)。
请注意,这一机制也同样适用于在 cURL 中使用代理的情况。
实现代理轮换
如果您多次使用同一代理服务器,目标站点最终会封锁其 IP 地址。为防出现这种情况,您必须确保所执行的每个请求都来自不同的代理服务器。要实现这一目标,采用下述这一简单方法即可:
- 定义一个对象列表,每个对象都包含连接到不同代理的信息。
- 在每次请求前随机选择一个代理对象。
- 在 Axios 中配置选定的代理。
采用上述方法的前提是您可以访问可靠的代理服务器池。获得大量服务器的访问权限可能所费不菲。另外,将逻辑集成到您的代码中可能是件麻烦、枯燥的事情。
而这正是 Bright Data 可以帮忙的地方,它提供轮换代理功能,可自动为您切换 IP 地址!每次连接时,您都可以访问提供新 IP 地址的代理。这些代理服务器遍布 195 个国家/地区,提供极长的网络正常运行时间,且保证 99.9% 的成功率。试一试 Bright Data 的 轮换代理 !
结语
在本 Axios 代理教程中,您了解了在 Axios 中采用代理的原因和方法。您现在知道如何在 Axios 中设置 HTTP/HTTPS/SOCKS 代理了。如上文所述,只需几行代码即可!
您也认识到不应使用免费的代理服务。因此,您现在只需决定选择哪家代理服务提供商即可。为节省时间和精力,我们强烈推荐您选择 Bright Data,它是市面上最好的代理服务提供商。
Bright Data 掌控着全球最好的代理服务器,为财富 500 强企业和 20,000 多家客户提供服务。其全球代理网络包括:
- 数据中心代理 — 超过 770,000 个数据中心 IP。
- 住宅代理 — 超过 7200 万个住宅 IP,覆盖 195 个以上的国家/地区。
- ISP 代理 — 超过 700,000 个 ISP IP。
- 移动代理 — 超过 700 万个移动 IP。
整体而言,这是目前最大、最可靠的代理网络之一。联系我们的销售代表,了解哪款 Bright Data 产品最符合您的需求。
支持支付宝等多种支付方式