本 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 库包括:
太棒了!您已准备就绪,可以在 Axios 中设置代理了!
HTTP/HTTPS 代理
您的 HTTP/HTTPS 代理的 URL 应该是这样的:
"<PROXY_PROTOCOL>://<PROXY_HOST>:<PROXY_PORT>"对于 HTTP 代理, 应为 “http”,对于 HTTPS 代理, 应为 “https”。 通常为原始 IP,而 则为代理服务器监听的端口。
例如,假设这是您的 HTTP 代理的 URL:
"http://47.88.62.42:80"您可在 Axios 中按下述方法设置该代理:
axios.get(targetURL, { proxy: { protocol: "http", host: "48.88.62.42", port: "80" } })如您所见,本质而言,欧博allbet就是将代理 URL 分成两部分,并在代理配置中正确指定它们。Axios 现在将通过指定的 HTTP 代理服务器向作为参数传递的 URL 发出请求。
让我们来验证一下,上述 Axios 代理方法是否有效!
在线检索免费的 HTTP 或 HTTPS 代理服务器 URL。例如,这个免费的代理服务器 URL:
Protocol: HTTP; IP Address: 52.117.157.155; Port: 8002完整的代理 URL 应为 “: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 可能是这样的:
:[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 多家客户提供服务。其全球代理网络包括:
整体而言,这是目前最大、最可靠的代理网络之一。联系我们的销售代表,了解哪款 Bright Data 产品最符合您的需求。