您是否正在寻找有关如何使用 NodeJS 平台开发代理服务器的教程?现在您来到了正确的页面上,因为下面的文章将为您提供有关如何轻松完成此操作的分步指南。

众所周知,代理可以通过使用不同的 IP 地址来掩盖您的真实 IP 地址,从而为 Internet 用户提供安全和保护,使其免受 Internet 上的监视和基于 IP 的限制。

这是代理服务器的基础知识,但有些确实具有高级功能,例如IP 轮换、使自己无法检测到的能力,甚至支持 HTTP 标头修改等。

对于某些人来说,这项技术可能看起来很陌生,他们觉得这不是他们可以复制的东西。实际上,除非您尝试构建一个用于生产级环境的代理服务器,否则可以轻松开发代理服务器。

这是因为工作模型可以在大多数编程语言中重新定位,而无需编写数百页。在本文中,我们将致力于使用 NodeJS 平台开发一个代理服务器,它可以充当 Internet 上客户端应用程序和 Web 服务器之间的中介。您可能会感兴趣的是 NodeJS 是开发代理服务器的好平台。

重要的是,在我们继续之前,您将使用本指南开发的代理服务器无法与实际使用的代理服务器相提并论,因为该代理服务器不包含安全措施,不是多线程的,甚至不处理例外。您可以将其视为概念证明。


代理服务器概述

在进入编码方面之前,了解代理服务器背后的概念很重要,因为这将帮助您更好地理解工作原理。对许多人来说,他们认为代理只是掩蔽 IP 地址的工具。好吧,虽然这是普通互联网用户广为人知的代理用例,但代理远不止于此。

代理服务器的最佳定义是具有硬件的计算机软件,充当客户端计算机和 Internet 上的 Web 服务器之间的中介。代理不一定要掩盖一个人的 IP 地址,这可以在为工作场所监视或过滤内容而设置的透明代理的情况下看到。

如果您可以开发可将请求路由到 Internet 上的 Web 服务器的工作软件,那么您就有了代理。Internet 上的许多代理服务器都使用专门的代理服务器软件,并且不费心重新发明轮子。

您也不需要重新发明轮子,因为您可以使用软件轻松创建和管理代理。但是,如果您对代理服务器的开发方式有一定的了解,这并没有什么坏处。


代理服务器如何工作?

我们将要开发的代理服务器将有一个简单的工作机制。它确实有一个预定义的目标,因为它是一个概念证明。我们想要证明的是您的 Web 请求正在访问代理服务器。

因此,当您在启用代理的情况下发送 Web 请求时,请求会通过代理服务器,然后代理服务器会在控制台上打印一些内容,然后在浏览器环境中将响应返回给您。

它使用网络套接字库来实现这一点。您需要知道的一件事是代码正在同一台 PC 上运行和管理,因此 IP 地址将是相同的。

如果您想要一个不同的 IP 地址,您需要在另一台计算机上托管您的代理服务器脚本,以便它可以真正成为已知代理的中介。

对于本文中使用的脚本,IP 地址保持不变,这就是为什么您应该将其更多地视为概念证明。请记住,最重要的是您的请求在到达代理服务器的基本工作目标之前就已经到达代理服务器脚本。


使用 NodeJS 的 HTTP 代理编码指南

对于基本的代理服务器,您不需要使用许多库和框架。事实上,对于我们将要开发的那个,您所需要的只是 NodeJS 和 Express 框架。您需要 http 和 https 库,但在安装 NodeJS 时会捆绑这些库。

安装要求

  • NodeJS

NodeJS 是您在考虑使用 Javascript 开发代理服务器之前需要安装的最重要的工具。对于新手来说,NodeJS 是 Javascript 代码在浏览器环境之外运行和执行的环境。

考虑到它最初是为在浏览器环境中运行而开发的,它改变了游戏规则,并使 Javascript 接近于其他成熟语言。下面是如何安装 NodeJS。

第 1 步:访问NodeJS 官方网站并下载安装程序。

第 2 步:运行安装程序并按照步骤操作。安装程序将引导您完成所有操作。

第 3 步:同意条款并等待安装完成。

第 4 步:对于某些计算机,您需要重新启动它们才能进行安装。对于其他人,您可以直接开始使用 NodeJS。

第 5 步:在命令提示符下输入以下代码,确认是否安装成功。

node -v

如果安装,上面的命令将在控制台上打印出 nodeJS 版本,如果安装不成功,则抛出异常。试试下面的代码来测试 nodeJS 包的安装。

npm -v
  • ExpressJS

ExpressJS 是一个用于开发 Web 应用程序的 Web 框架。如果您想开发一个真正的代理服务器,您需要将它托管在不同的计算机或服务器上,因此它将采用 Web 应用程序的形式。以下是安装 ExpressJS Web 框架所需的步骤。这应该仅在安装 nodeJS 后完成。

第 1 步:创建一个新文件夹并将其设为您的工作目录。

第 2 步:使用 init 命令创建 package.json 文件

第 3 步:使用下面的 npm 命令安装 ExpressJS 框架。

nodeJS HTTP 代理的示例代码

下面是 HTTP 代理服务器的示例代码。该代码非常基本,只是概念证明。代码是从StackOverflow中挑选出来的。

/* eslint-disable @typescript-eslint/no-var-requires */

// https://stackoverflow.com/a/63602976/470749

const express = require('express');

const app = express();

const https = require('https');

const http = require('http');

// const { response } = require('express');

const targetUrl = process.env.TARGET_URL || 'https://jsonplaceholder.typicode.com'; // Run localtunnel like `lt -s rscraper -p 8080 --print-requests`; then visit https://yourname.loca.lt/todos/1 .

const proxyServerPort = process.env.PROXY_SERVER_PORT || 8080;

// eslint-disable-next-line max-lines-per-function

app.use('/', function (clientRequest, clientResponse) {
const parsedHost = targetUrl.split('/').splice(2).splice(0, 1).join('/');

  let parsedPort;

  let parsedSSL;

  if (targetUrl.startsWith('https://')) {

    parsedPort = 443;

    parsedSSL = https;

  } else if (targetUrl.startsWith('http://')) {

    parsedPort = 80;

    parsedSSL = http;

  }

  const options = {

    hostname: parsedHost,

    port: parsedPort,

    path: clientRequest.url,

    method: clientRequest.method,

    headers: {

      'User-Agent': clientRequest.headers['user-agent'],

    },

  };

  const serverRequest = parsedSSL.request(options, function (serverResponse) {

    let body = '';

    if (String(serverResponse.headers['content-type']).indexOf('text/html') !== -1) {

      serverResponse.on('data', function (chunk) {

        body += chunk;

      });

      serverResponse.on('end', function () {

        // Make changes to HTML files when they're done being read.

        // body = body.replace(`example`, `Cat!`);

        clientResponse.writeHead(serverResponse.statusCode, serverResponse.headers);

        clientResponse.end(body);

      });

    } else {

      serverResponse.pipe(clientResponse, {

        end: true,

      });

      clientResponse.contentType(serverResponse.headers['content-type']);

    }

  });

  serverRequest.end();

});

app.listen(proxyServerPort);

console.log(`Proxy server listening on port ${proxyServerPort}`);


常见问题

问:您应该自己开发代理服务器吗?
您可能会问是否应该为自己开发代理服务器或使用已经开发的代理服务器。正确的答案是 – 使用来自受信任提供商的代理服务器。这是因为您将重新发明轮子,同时花费更多的钱。

同样重要的是,您知道您将需要一定程度的技能和维护才能设置代理,这在一天结束时是不值得的。除非您有充分的理由开发供您个人使用的代理服务器,否则您应该自己做,因为有值得信赖的供应商提供高质量的代理。

问:开发代理服务器的最佳方式是什么?
如果您必须自己开发代理服务器,那么您最好的出生就是使用经过多年测试和信任的基础架构和代理软件。虽然您可以自己编写代理脚本,但它在生产环境中不够有效。

您可以使用诸如squid 代理服务器之类的代理软件来轻松设置代理,而不是从头开始编写代理软件。使用现成代理软件的优势包括更好的性能、出色的安全性和可靠性。您还可以在此过程中节省编码时间和金钱。


结    论

综观以上内容,您可以看到我们不建议我们的读者重新发明轮子。您可以学习如何开发代理服务器以了解其原理并了解它们的工作原理。

但是,如果您使用来自受信任的提供商的代理,它会更便宜、更高效,因为这样可以节省您的时间和金钱,同时为您提供更好的性能。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票!成为第一位评论此文章。

No more articles