使用节点获取的代理

如何在 2025 中使用带有 Node-Fetch 的代理

本指南介绍了如何使用以下设备设置代理 Node-Fetch管理 IP 轮换,并根据我的需求选择免费或高级服务。让我们深入了解一下!

先决条件

要继续学习,请确保您已

  • Node.js (版本 12.20.0 或更高)
  • 终端或命令提示符
  • 安装 Node-Fetch 和 HTTPS-Proxy-Agent

步骤 1:安装 Node-Fetch 和 HTTPS-Proxy-Agent

在项目目录下,打开终端并运行以下命令:

npm i node-fetch
npm i https-proxy-agent

如果遇到找不到模块 "node-fetch "之类的错误,通常是由于模块解析问题造成的。请尝试运行 npm install 更新项目中的依赖关系。此外,请确保您的 package.json 文件设置了 "type"(类型)和 "module"(模块):"模块 "设置,因为 Node-Fetch v3.x 是仅限 ESM 的模块。

了解代理服务器以及网络抓取为何需要代理服务器

代理IP - 突破网站地域 & IP 限制 是应用程序和目标服务器之间的中介。使用代理时,您的请求似乎来自代理的 IP 地址,而不是您自己的 IP 地址,这有助于防止拦截。

代理主要有两种类型:

  • HTTP 代理: 仅支持 HTTP 流量。
  • HTTPS 代理服务器: 支持 HTTP 和 HTTPS 流量,使其用途更加广泛。

在 Node-Fetch 中使用代理需要在获取请求中传递一个自定义代理服务器。然而,Node-Fetch 本身并不支持代理,因此我们将为此使用 https-proxy-agent 软件包。

免费代理与付费代理:什么最适合您的应用程序?

网上有免费的代理列表,但这些列表都有一些折衷方案:

  • 优点 免费并可广泛获取。
  • 缺点 通常不稳定,速度较慢,更容易被网站屏蔽。

对于要求高可用性的应用程序(如网络搜索),付费代理服务器能提供更好的可靠性和速度。有些服务提供旋转代理和防拦截功能,我们将对此进行更详细的讨论。

使用 Node-Fetch 设置静态代理

从基本设置开始,让我们使用带有 Node-Fetch 的静态代理来发出 HTTP 请求。如果你只有一个代理服务器,那么这种设置是合适的。

Import the required modules:
import fetch from 'node-fetch';
import { HttpsProxyAgent } from https-proxy-agent;

定义 您的代理配置:

const proxyHost = '200.105.215.22';
const proxyPort = 33630;
const proxyUrl = `http://${proxyHost}:${proxyPort}`;
const proxyAgent = new HttpsProxyAgent(proxyUrl);

提出请求 通过代理:

(async () => {
const targetUrl = 'https://ident.me';
try {
const response = await fetch(targetUrl, { agent: proxyAgent });
const data = await response.text();
console.log(data); // Expected output: Proxy IP address
} catch error) {
console.error(error);
}
})();

在本例中,我们的目标是 https://ident.me、 返回请求者的 IP 地址。这种设置对于简单的任务来说没有问题,但对于高强度的网络扫描或速率受限的应用程序接口来说,往往就不够用了。

使用 Node-Fetch 旋转代理:处理动态 IP 禁止

旋转代理非常适合大批量刮擦,有助于将请求分散到多个 IP 地址,降低被拦截的可能性。

点击此处了解更多关于最佳旋转代理的信息

  1. Bright Data:高性能代理服务器,功能先进,是综合解决方案的理想选择。
  2. Smartproxy:经济、可靠的代理服务器,覆盖全球,是网络搜索的理想选择。
  3. Oxylabs:卓越的性能和支持,非常适合需要顶级代理服务器的企业。
  4. IPRoyal:灵活的轮换和定价,适合小型项目或作为辅助供应商。
  5. SOAX:高级代理,具有精确的目标定位和多种旋转设置,价格极具竞争力。
  6. NetNut:具有大规模搜索的广泛功能,但只有基本的文档和仪表板。
  7. Infatica:为企业提供价格合理、来源合法、性能稳定的代理服务器。

步骤 1:创建代理列表

定义应用程序可以轮换使用的代理列表。您可以使用静态列表,也可以从文件或应用程序接口动态加载代理。

const proxyList = [
{ host: '103.69.108.78', port: 8191 },
{ host: '61.29.96.146', port: 80 },
{ host: '154.204.58.155', port: 8090 }
];

步骤 2:在请求中轮流使用代理服务器

使用循环来轮换使用代理服务器,对每个请求使用不同的代理服务器。这种技术可将负载分散到多个 IP 上。

import fetch from 'node-fetch';
import { HttpsProxyAgent } from https-proxy-agent;
const proxyList = [
{ host: '103.69.108.78', port: 8191 },
{ host: '61.29.96.146', port: 80 },
{ host: '154.204.58.155', port: 8090 }
];
async function rotateProxies(proxyList、targetUrl) {
for (const 代理IP - 突破网站地域 & IP 限制 of proxyList) {
const proxyUrl = `http://${proxy.host}:${proxy.port}`;
const proxyAgent = new HttpsProxyAgent(proxyUrl);
try {
const response = await fetch(targetUrl, { agent: proxyAgent });
const html = await response.text();
console.log(html);
} catch error) {
console.error(`Error with proxy ${proxy.host}:${proxy.port}`, error);
}
}
}
const targetUrl = 'https://ident.me';
rotateProxies(proxyList,targetUrl);

这种方法对没有采用高级僵尸检测机制的网站效果很好。不过,对于反僵尸措施较强的网站,可以考虑使用高级旋转代理。

通过 Node-Fetch 使用高级代理服务:绕过高级反僵尸措施

免费的代理服务器往往不可靠,而且很容易被发现,因此我们来看看更强大的解决方案。 高级代理提供商 如 Bright Data、ZenRows 和 Oxylabs,它们提供旋转代理,并有复杂的机制来规避 IP 屏蔽和验证码。

第 1 步:注册并获取 API 密钥

在 Bright Data 注册后,您将收到一个 API 密钥,允许您通过其代理网络验证您的请求。Bright Data 还提供自定义配置和用户仪表板,用于管理请求和监控使用情况。

const apiKey = ';
const targetUrl = 'https://www.amazon.com';
const apiUrl = `https://brightdata.com/api/v1/?apikey=${apiKey}&url=${encodeURIComponent(targetUrl)}`;

第 2 步:定义其他应用程序接口参数

Bright Data 提供各种设置来增强匿名性和减少检测,例如启用 JavaScript 渲染(对处理动态内容有用)和调整每个请求的代理旋转设置。

const params = {
"js_render": "true", /// Renders JavaScript for dynamic pages
"proxy_type": "residential" // Use residential proxies for higher anonymity
};

第 3 步:通过 Bright Data API 提出申请

配置完成后,您就可以使用 Node-Fetch 通过 Bright Data 的网络发出请求。Bright Data 会处理 IP 轮换和反僵尸机制,以确保您的请求可靠通过。

import fetch from 'node-fetch';
(async () => {
const response = await fetch(apiUrl, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
params: params
});
const html = await response.text();
const statusCode = response.status;
console.log('Status Code:',statusCode);
console.log(html);
})();

高级技术:利用中间件和异步处理实现代理轮换自动化

为了提高效率,可以考虑构建中间件来自动管理代理。下面是一个使用异步处理多个请求的示例:

创建功能 随机选择代理:

function getRandomProxy(proxyList) {
return proxyList[Math.floor(Math.random() * proxyList.length)];
}

修改旋转逻辑 并发控制,以避免服务器超载:

import fetch from 'node-fetch';
import { HttpsProxyAgent } from https-proxy-agent;
const proxyList = [ /* proxy objects */ ];
async function rotateProxies(targetUrl, concurrency = 5) {
const tasks = Array.from({ length: concurrency }, async () => {
const proxy = getRandomProxy(proxyList);
const proxyUrl = `http://${proxy.host}:${proxy.port}`;
const proxyAgent = new HttpsProxyAgent(proxyUrl);
try {
const response = await fetch(targetUrl, { agent: proxyAgent });
const html = await response.text();
console.log(`Success with ${proxy.host}:${proxy.port}`);
} catch error) {
console.error(`Error with ${proxy.host}:${proxy.port}`, error);
}
});
await Promise.all(tasks);
}
const targetUrl = 'https://ident.me';
rotateProxies(targetUrl、 3); // Set concurrency as needed

结论

在 Node-Fetch 中使用代理已成为可靠的网络搜刮和数据自动化的必要条件。无论您选择免费代理、高级服务还是自定义轮换设置,这些技术都将帮助您保持访问并避免基于 IP 的限制。用您的目标网站测试每种方法;有些方法可能需要高级的高级解决方案才能获得一致的结果。

既然你已经拥有了旋转代理和躲避 IP 屏蔽的工具,那么即使是最难的网站,你也能从中搜刮到数据。搜索愉快

类似文章