返回博客
指南
苏丘·丹2023年4月25日阅读时长:7分钟

使用代理和 Axios Node.js 解除对网站的封锁并保护您的身份信息

使用代理和 Axios Node.js 解除对网站的封锁并保护您的身份信息

什么是 Axios?

Axios 是一种流行的基于承诺的 HTTP 客户端库,可让您在 Node.js 中发出 HTTP 请求。它轻便易用,是网络搜索项目的最佳选择。

Axios 支持多种功能,如代理、自动转换 JSON 数据、支持取消请求,以及支持拦截器(允许您处理身份验证和错误处理等任务)。

什么是代理?

代理也称代理服务器,是客户端(如网络浏览器或搜刮器)和目标服务器(如网站)之间的中介。

代理接收来自客户端的请求,并将其转发给目标服务器。然后,目标服务器将响应发送回代理,代理再将响应发送回客户端。

在网络搜刮中,您可以使用代理服务器来隐藏搜刮器的 IP 地址,这样您搜刮的网站就不会检测到并阻止请求。此外,使用多个代理也有助于防止被发现和被阻止。

有些代理服务器提供轮换 IP 选项,因此您可以轮换代理服务器以避免被屏蔽。

先决条件

要在 Axios 和 Node.js 中使用代理,需要在电脑上安装 Node.js 和 npm(Node 包管理器)。如果尚未安装,可从Node.js 网站下载并安装。

安装 Node.js 和 npm 后,打开终端,为项目创建一个新文件夹,然后运行 `npm init` 命令。按照说明创建基本 package.json 文件。

使用此命令安装 axios:

npm install axios

提出 HTTP 请求

让我们用 Axios 进行第一次请求。我们将向 ipify 端点发送一个 GET 请求。请求将返回我们的 IP 地址。

创建一个 index.js 文件并粘贴以下代码:

// Import axios

const axios = require('axios');

(async () => {

    // For storing the response

    let res

    try {

   	 // Make a GET request with Axios

   	 res = await axios.get('https://api.ipify.org?format=json')

   	 // Log the response data

   	 console.log(res.data)

    } catch(err) {

   	 // Log the error

   	 console.log(err)

    }

    // Exit the process

    process.exit()

})()

我们首先导入 axios 库,然后利用 get 方法向 api.ipify.org 端点发送请求。

您可以在终端中使用 `node index.js` 命令运行代码。输出结果应显示您的 IP 地址。在浏览器中访问URL,仔细检查结果。

使用代理服务器

在编写任何代码之前,请访问免费代理列表网站,然后选择一个离您所在地最近的代理。在我的例子中,我将选择一个德国的代理。

axios 的 `get` 方法支持名为 options 的第二个参数。在这个参数中,我们可以定义代理的详细信息。

我们之前使用代理发出的 GET 请求将如下所示:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        protocol: 'http',

        host: '217.6.28.219',

        port: 80

    }

})

运行代码后,你会发现返回的 IP 地址与你自己的不同。这是因为请求是通过代理服务器发出的,因此你的 IP 地址不会被检测到。

认证怎么办?

订购高级代理服务时,您将收到一个用户名和密码,供您在应用程序中进行身份验证时使用。

Axios 的 `proxy` 对象有一个 auth 属性,可以接收身份验证凭据。使用这种设置的 GET 请求示例如下:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        protocol: 'http',

        host: '217.6.28.219',

        port: 80,

        auth: {

            username: "PROVIDED_USER",

            password: "PROVIDED_PASSWORD"

        }

    }

})

将代理设置为环境变量

在 Axios 中配置代理的另一种方法是设置 `http_proxy` 或 `https_proxy` 环境变量。这种方法允许你跳过在 Axios 命令中配置代理详细信息,因为它们会自动从环境变量中获取。

为了实现跨平台兼容性,我建议安装 "cross-env "软件包,它为 Windows 实现了类似导出的命令。

使用此命令全局安装软件包:

npm install -g crossenv

让我们清理一下 `axios.get` 代码,使其达到初始版本。代码应该是这样的

res = await axios.get('https://api.ipify.org?format=json')

我们将在命令前面加入代理 URL,而不是简单地使用 node index.js 运行代码,如下所示:

crossenv https_proxy=http://217.6.28.219:80/ node index.js

脚本的输出应该是代理的 IP 地址,而不是你自己的 IP 地址。要确认这一点,可以访问浏览器中的 ipifyURL

轮流代理

轮流使用代理服务器是个好主意,因为这有助于避免被发现并防止网站屏蔽你的 IP 地址。如果 IP 地址在短时间内发出过多请求,或与搜索活动有关,网站就会对其进行跟踪和屏蔽。

我们可以使用 "免费代理列表"网站来编制一个代理列表,以便在每次 "axios "请求时轮流使用。

请注意,您在网站上找到的代理列表可能与我编制的列表不同。我创建的列表如下:

const proxiesList = [

    {

   	 protocol: 'http',

   	 host: '217.6.28.219',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '103.21.244.152',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '45.131.4.28',

   	 port: 80

    }

];

好了,让我们把 `proxy` 属性放回 `axios` 配置中。但我们不会只使用一个代理,而是从代理列表中随机挑选一个。代码如下

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: proxiesList[Math.floor(Math.random() * proxiesList.length)]

})

这是 index.js 文件的内容:

// Import axios

const axios = require('axios');

const proxiesList = [

    {

   	 protocol: 'http',

   	 host: '217.6.28.219',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '172.67.180.244',

   	 port: 80

    },

    {

   	 protocol: 'http',

   	 host: '45.131.4.28',

   	 port: 80

    }

];

(async () => {

    // For storing the response

    let res

    try {

   	 // Make a GET request with Axios

   	 res = await axios.get('https://api.ipify.org?format=json', {

   		 proxy: proxiesList[Math.floor(Math.random() * proxiesList.length)]

   	 })

   	 // Log the response data

   	 console.log(res.data)

    } catch(err) {

   	 // Log the error

   	 console.log(err)

    }

    // Exit the process

    process.exit()

})()

使用 WebScrapingAPI 代理

使用 WebScrapingAPI 等服务提供的高级代理服务比使用免费代理服务更好,因为它们更可靠、更快速、安全性更高。高级代理不容易被网站屏蔽,延迟也更低。

相比之下,免费的代理服务器可能速度慢、不可靠、含有恶意软件,而且容易被网站屏蔽。

想试用 WebScrapingAPI?没问题,只需注册我们的 14 天免费试用版,您就可以使用所有很酷的功能,甚至还能获得 5,000 点数。

拥有账户后,前往API Playground,在代码示例部分选择代理模式选项卡

选中“代理模式”的代码示例面板,展示了一个通过代理服务器转发请求的 curl 命令

让我们在代码中使用代理 URL。axios GET 请求将如下所示:

res = await axios.get('https://api.ipify.org?format=json', {

    proxy: {

        host: 'proxy.webscrapingapi.com',

        port: 80,

        auth: {

            username: 'webscrapingapi.render_js=0.device=desktop.proxy_type=datacenter',

            password: '[YOUR_API_KEY]'

        }

    }

})

用户名 "属性允许您启用或禁用特定的 API 功能。请记住,您还必须在 "密码 "属性中设置 API 密钥。您可以在此处查看完整的文档。

由于 WebScrapingAPI 会在每次请求时轮换 IP,因此每次运行此代码时,都会收到不同的 IP 地址。您可以阅读代理模式的文档,了解有关此功能的更多信息。

此外,您还可以在数据中心代理和住宅代理之间进行切换。有关我们提供的不同类型代理的更多信息,请访问代理文档

结论

使用代理是网络搜刮的一个重要方面,因为它可以让你隐藏 IP 地址并访问被屏蔽的网站。Axios 是一个功能强大的数据搜刮库,与可靠的代理相结合,可以实现高效快速的数据提取。

通过使用像 WebScrapingAPI 这样的高级代理服务,您可以获得广泛的功能,包括 IP 轮换以及在数据中心和住宅代理之间切换的选项。

我们希望这篇文章能帮助您了解如何使用 Axios 和 Node.js 代理,以及如何满足您的刮擦需求。欢迎注册我们的 14 天免费试用版,以测试我们的服务并探索所有特性和功能。

关于作者
Suciu Dan,WebScrapingAPI 联合创始人
Suciu Dan联合创始人

Suciu Dan 是 WebScrapingAPI 的联合创始人,他撰写了关于 Python 网络爬虫、Ruby 网络爬虫以及代理基础设施的实用指南,这些指南专为开发者而设计。

开始构建

准备好扩展您的数据收集规模了吗?

加入2,000多家企业,使用WebScrapingAPI在无需任何基础设施开销的情况下,以企业级规模提取网页数据。