如何在 Axios 中设置代理

文章正文
发布时间:2024-05-25 05:08

本 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 产品最符合您的需求。

首页
评论
分享
Top