Node.js是一种流行的JavaScript运行时环境,让您可创建服务器端和网络应用程序。例如,如果需要在Node.js中从远程API或网站获取数据,可以使用网络代理服务器作为应用程序和互联网之间的中介。这样,您就可以绕过网络限制,访问受地理位置限制的内容,并隐藏您的IP地址。
大多数现代JavaScript应用程序都是使用Fetch API来发出HTTP请求的。这是网络浏览器的内置功能,自Node.js v16 起,无需依赖任何外部组件即可使用。但是,有一个问题:Node.js内置的获取功能与网络浏览器中的功能相同,不支持代理服务器。
幸好有一个简单的解决方案:node-fetch
库。该库包含适用于Node.js的Fetch API,能添加特定于Node.js的附加功能,包括使用Node.js HTTP代理程序的能力。HTTP代理程序是一种管理连接池的工具,让您可以为HTTP请求重复使用连接。这意味着,您可以使用HTTP代理程序来设置您的获取请求,将请求通过代理服务器发送。
在本文中,您将会了解到如何使用node-fetch
以及https-proxy-agent
库来创建同时支持HTTP和HTTPS代理服务器的HTTP代理程序。您还将了解到Bright Data代理服务,该服务提供多种代理类型和功能,可满足您的网页抓取需求。
如何在node-fetch中使用代理
在开始本教程之前,需要具备以下先决条件:
- Node.js已安装并能正常运行。
- 能访问网络代理。或者,出于测试目的,您也可以使用Node.js设置自己的网络代理。
具备了这些先决条件后,即可开始!
创建Node.js项目
您需要做的第一件事,是创建一个Node.js项目,并使用npm将其初始化。为此,请打开终端,并运行以下命令:
mkdir node-fetch-proxy
cd node-fetch-proxy
npm init -y
此命令将创建一个名为node-fetch-proxy
的文件夹,然后进入该文件夹,使用一些默认值创建一个package.json
文件。
安装node-fetch和https-proxy-agent
接下来,您需要使用以下命令,将node-fetch
和https-proxy-agent
库安装为项目的依赖库:
npm install –-save node-fetch https-proxy-agent
该命令会将这两个库安装到项目的node_modules
文件夹,并相应地将package.json
文件更新。
使用HTTPSProxyAgent和node-fetch以通过代理进行HTTP调用
安装node-fetch
和https-proxy-agent
库后,要通过代理进行HTTP调用,需要使用https-proxy-agent
库中的HttpsProxyAgent
类和node-fetch
库中的fetch
函数。为此,请在项目文件夹中创建一个名为proxy.mjs
的文件,然后添加以下代码:
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';
// Replace <proxy_url> with your actual proxy URL
const agent = new HttpsProxyAgent('<proxy_url>');
// Use fetch with the agent option to make an HTTP request through the proxy
// Replace <target_url> with the URL you want to request
fetch('<target_url>', { agent })
.then((response) => response.text())
.then((text) => console.log(text))
.catch((error) => console.error(error));
此代码将完成以下操作:
- 从
node-fetch
库导入fetch
函数,该库为Node.js提供与浏览器兼容的Fetch API。 - 从
https-proxy-agent
库导入HttpsProxyAgent
类,该库创建支持HTTPS代理服务器的HTTP代理程序。 - 使用您的代理URL创建一个
HttpsProxyAgent
实例。您需要用实际的代理URL来取代<proxy_url>
,URL的格式应为http://username:password@host:port
。 - 使用带有代理选项的
fetch
函数,通过代理发出HTTP请求。您需要用您想要向其发送请求的URL来取代<target_url>
,该URL可以是任何有效的HTTP或HTTPS URL。 - 处理响应,并输出发生的任何错误。
保存代码,并运行以下命令:
node proxy.mjs
此命令执行您的代码,并通过代理发出HTTP请求。您应会在终端中看到响应文本或任何错误。
在node-fetch中使用代理的限制
虽然这种方法在使用简单的代理时效果很好,但您会发现,许多实际用例(如网页抓取)需要更复杂的方法。许多网站和网络API会屏蔽知名代理的IP地址,导致您难以收集到所需的数据。
此外,网站可能设置了地理限制,会根据访问者的位置对其隐藏内容。例如,一些美国报纸因难以遵守《通用数据保护条例》(GDPR)和《电子隐私指令》之故,阻止欧洲访问者访问其网站。
幸运的是,较先进的代理(比如Bright Data代理服务提供的代理)具备多种类型的代理,可以帮助用户绕过这些限制。
Bright Data代理服务
如果您正在为网页抓取寻找可扩展的可靠代理服务,不用再寻觅了。Bright Data是领先的代理解决方案提供商,在195个国家/地区提供超过7200万个IP地址,正常运行时间达99.9%。
使用Bright Data代理服务器,您可以根据自己的使用情况和预算来选择不同类型的代理,例如住宅、数据中心、互联网服务提供商(ISP)、移动或超级代理。当所创建的网页抓取工具需要从一些会封锁已知代理IP地址的网站获取内容时,如此多的选择是很有帮助的。
Bright Data代理可让您选择与通常访问您尝试抓取的内容的用户类型最相符的代理类型,而不是依赖于在您无法控制的位置运行的通用代理。您还可以使用高级功能,例如地理定位、IP轮换和会话控制,以确保您的应用程序不会被屏蔽。
Bright Data代理类型
Bright Data为不同的网页抓取需求提供不同类型的代理。以下是该平台提供的其中一些代理:
- 住宅代理通过真实的设备(例如个人电脑或笔记本电脑)传输您的互联网查询,这些设备是经由住宅ISP连接到网络的。这些代理在网页抓取活动中的表现超卓,因为它们和普通用户无异,这会减低您通过代理发送的请求被屏蔽的机会。
- 代理服务器是一条途径,让您进入Bright Data广泛的住宅代理网络。只需有一个超级代理URL,您就可以连接到任何住宅代理,无需指定特定的IP地址。此外,超级代理提供灵活性,让您可以对多项设置进行微调,包括选择您想使用的住宅代理的国家/地区、城市、ISP或ASN。
- 数据中心代理使用分配给数据中心设施内的服务器的IP地址。数据中心代理很容易被网站和API检测到并随而屏蔽,但如果应用程序要获取数据的URL是不会阻止代理请求的,则数据中心代理仍然是很有用的。最适合使用它们的网页抓取项目,是抓取流量不需要来自住宅、企业或移动IP地址的项目。
- ISP代理是分配给ISP托管的服务器的IP地址。ISP代理与住宅代理类似,不同之处在于ISP代理的IP地址可以是住宅或企业IP。因此,它们非常适合用来抓取那些预期流量为住宅和企业混合流量的网站。
- 移动代理是通过蜂窝网络连接到互联网的移动硬件(即智能手机或平板电脑)的IP地址。Bright Data移动代理有效地模拟真实移动用户的活动,几乎是无法检测到的。当您在抓取由移动网站和API提供的特定内容时,想确保不会因为使用非移动IP地址而被阻止访问数据,则它们特别有用。
代理管理器和API
面对如此多的选择,代理使用的管理可能会很复杂。幸运的是,Bright Data代理管理器让您可以轻松配置和管理代理、监控使用情况和性能,并对任何问题进行故障排除。
此外,您可以使用Bright Data API和集成,将代理无缝地集成到您的代码中。Scraping Browser API让您在运用您大概已熟悉的工具(例如Playwright和Puppeteer)时,可以轻松使用代理,而Web Unlocker则可以帮助您克服通常会阻止您的抓取工具访问的网站的封锁。
结语
在本文中,您了解了如何使用node-fetch
库和https-proxy-agent
库来创建支持HTTPS代理服务器的HTTP代理程序。您还了解了Bright Data代理服务,该服务提供多种代理类型和功能,可满足您的网页抓取需求。
在Node.js中使用网络代理发送获取请求,可以帮助您克服网络限制、访问受地理位置限制的内容或隐藏您的IP地址。然而,使用node-fetch
和https-proxy-agent
的简单代理可能无法满足某些网络抓取需求,尤其是当您需要匿名、地理定位、IP轮换或其他高级功能时。在这些情况下,您应该考虑使用Bright Data代理。
Bright Data的代理服务提供广泛的功能,可以帮助您访问任何网站或API,而不会受到屏蔽或限制。您还可以根据自己的使用情况和预算来选择不同类型的代理。要开始使用Bright Data代理服务,请立即注册免费试用。