in

如何为Node-Fetch使用代理服务器?

为什么是Node-Fetch?

Node-fetch是一个流行的HTTP客户端库,每周大约有2000万次下载;根据NPM,它也是有史以来下载量最大的NPM包之一。

Node-fetch的主要动机是实现一个类似于window.fetch的服务器端API,一个客户端的API;因为它是在浏览器中实现。该API主要用于在浏览器端进行异步请求以加载内容。然而,在服务器端,有许多更多的使用情况。

其中一个用例是网页爬取。网页爬取是在不打开真实浏览器的情况下以编程方式抓取网页。大多数网站并不喜欢被爬取,而使用代理是你可以用来爬取网页而不被阻止许多工具之一。

正如你将看到的那样,这并不像它看起来那样简单明了。


解决方案

不幸的是,Node-fetch并不支持代理。但有一个变通办法。通过使用node-https-proxy-agent,你将能够轻松地通过HTTPS代理转发你的所有请求。

以下是如何做到这一点:

// proxy_test.py


// npm install node-fetch
// npm install https-proxy-agent

const fetch = require('node-fetch');
const HttpsProxyAgent = require('https-proxy-agent');


(async () => {
    const proxyAgent = new HttpsProxyAgent('http://46.250.171.31:8080');
    const response = await fetch('https://httpbin.org/ip?json', { agent: proxyAgent});
    const body = await response.text();
    console.log(body);
})();

为了测试这个脚本,我们将使用一个公开提供HTTPS代理的免费代理服务。使用这种工具时要小心。这些工具会拦截你将通过它们发送的所有HTTP流量。他们可以对这些流量做任何事情。

既然如此,现在让我们检查一下它是否工作。如果我运行node proxy_test.py,响应将是{ip:"46.250.171.31"}


你应该知道的关于代理的事情

现在你知道了如何用node-fetch使用网络代理,在使用它们之前有几件事需要了解。

首先,不是所有的代理供应商都是平等的。一些代理服务器,如本例中使用的代理服务器,是免费的。如果你谨慎地使用这些代理,那将是最好的。根据定义,他们可以访问您发送给他们的所有HTTP流量。大多数免费代理服务都会公开显示他们使用的IP地址,这使得任何网站都可以轻易地阻止他们。我建议你只将这些代理服务用于小规模使用、单次脚本或大学作业,而且只有在你不介意别人看到你所有的HTTP流量时才使用。

但使用付费代理供应商也不能保证你的HTTP请求会成功。一些供应商会使用所谓的 “数据中心 “IP,很容易被网站屏蔽。其他人可能会卖给你 “住宅 “IP,更可靠,但非常昂贵。你会注意到,有些供应商比其他供应商快得多。如果你做一些研究,你会发现你也可以购买4g代理,这些代理将使用来自真实电话的IP。


代理服务器可能是不够的

使用代理只是一种技术,可以让你在不被封锁的情况下进行网络刮奖。但还有许多事情你应该注意。

例如,你肯定应该学习User-Agent和头文件。如果你不设置这些,网站检测到不是来自真实浏览器的流量是很容易的。如果你想爬取含有大量JavaScript的网站,你也应该考虑使用一个真正的浏览器,称为无头浏览器


总    结

综上所述,选择一个代理服务商并不容易,需要考虑几个标准:成功率、IP质量、速度、服务商的声誉等。下面是你如何用node-fetch做的:

// proxy_test.py


// npm install node-fetch
// npm install https-proxy-agent

const fetch = require('node-fetch');
const HttpsProxyAgent = require('https-proxy-agent');


(async () => {
    const proxyAgent = new HttpsProxyAgent('http://46.250.171.31:8080');
    const response = await fetch('https://httpbin.org/ip?json', { agent: proxyAgent});
    const body = await response.text();
    console.log(body);
})();

[文中代码源自Scrapingbee]

我希望你在阅读这篇文章时能学到一些新东西。如果你想了解更多关于JavaScript中的网页抓取,我真的建议你看一下这个用NodeJS爬取网络的指南

What do you think?

68

Written by 砖家

68web团队是一支专注于跨境业务和数据获取的专业团队。我们致力于帮助企业成功出海,通过高效的数据爬取服务,为客户提供精准的数据支持;

凭借丰富的经验和专业的技术,我们不仅提供多语言网站建设,还包括国际市场推广和定制化的跨境电商解决方案;

我们的数据爬取平台利用强大的服务器和代理IP,确保获取高质量的数据,以满足客户在AI和大数据时代的需求。我们专注于提供全面的解决方案,助力企业在全球市场上取得成功。

如何使用Node-Fetch进行网页爬取?

如何用Puppeteer下载文件?