返回博客
指南
Suciu DanLast updated on Mar 31, 20262 min read

使用代理和 Axios Node.js 解锁网站并保护您的隐私

使用代理和 Axios Node.js 解锁网站并保护您的隐私

什么是 Axios?

Axios 是一个广受欢迎的、基于 Promise 的 HTTP 客户端库,可用于在 Node.js 中发起 HTTP 请求。它轻量且易于使用,是 Web 爬虫项目的绝佳选择。

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 中使用代理

在编写任何代码之前,请访问 Free Proxy List 网站并选择离您所在位置最近的代理。以我为例,我将选择一个德国的代理。

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 系统实现了类似 `export` 的命令。

使用以下命令全局安装该包:

npm install -g cross-env

让我们清理 `axios.get` 代码并将其恢复到初始版本。代码应如下所示:

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

我们不再直接通过 `node index.js` 运行代码,而是像下面这样在命令前添加代理 URL:

cross-env https_proxy=http://217.6.28.219:80/ node index.js

脚本的输出应为代理的 IP 地址,而非您本机的 IP。要确认这一点,您可以在浏览器中访问 ipify 网址

轮换代理

轮换代理是个好主意,因为它有助于避免被检测,并防止网站封禁您的 IP 地址。网站可能会追踪并封禁在短时间内发出过多请求的 IP 地址,或与爬网活动相关的 IP 地址。

我们可以利用 Free Proxy List 网站整理一份代理列表,并在每次 `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 沙盒,在“代码示例”部分选择“代理模式”选项卡

现在让我们在代码中使用代理 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]'

        }

    }

})

通过 `username` 属性,您可以启用或禁用特定的 API 功能。请注意,您还必须在 `password` 属性中设置您的 API 密钥。您可以在此处查看完整的文档。

每次运行此代码时,您都会获得不同的 IP 地址,因为 WebScrapingAPI 会在每次请求时轮换 IP。您可以通过阅读“代理模式”文档进一步了解此功能。

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

结论

使用代理是网络爬虫的重要环节,它能帮助您隐藏 IP 地址并访问被封锁的网站。Axios 是一款功能强大的数据抓取库,配合可靠的代理使用,可实现高效快速的数据提取。

通过使用 WebScrapingAPI 这样的高级代理服务,您将能够使用包括 IP 轮换以及在数据中心代理和住宅代理之间切换在内的多种功能。

希望本文能帮助您深入了解如何在 Axios 和 Node.js 中使用代理,以及它如何满足您的数据抓取需求。欢迎注册我们的 14 天免费试用,亲身体验我们的服务并探索所有功能。

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

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

开始构建

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

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