NodeJS中配置请求代理服务器方式

 更新时间:2023年10月30日 09:15:23   作者:高先生的猫  
这篇文章主要介绍了NodeJS中配置请求代理服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

NodeJS配置请求代理服务器

先来说说场景,之前我写过一个小爬虫,node写的,一直都是当做玩具来用的。

某天不知道谁在我的接口,导致被拉黑了。

大佬让我换个机器重新装一下,但是因为我的里面用到了一个图片处理库 sharp 装起来很烦,然后就研究研究能不能搞个代理服务器。

大体是如上图,用户的请求最后都会通过我的服务器去请求对方服务器,这就导致频率一高就被封。

那么我可以请求代理服务器,甚至是做一个代理池,再把请求平均开。

既然方案定下来了,那么我们就要开始测试了。

先找找自己怎么做,然后看看有没有现成的服务。

代理服务器

squid

squid 是应用层的代理服务软件,它可以提供缓存加速、应用层过滤的功能。

我的服务器就可以理解为客户机,通过代理服务器请求对方服务器。可以达到两个目的

缓存一部分请求,防止同一地址,短时间内大量请求。

隐藏客户机ip

阿布云

阿布云就是一个做代理的服务提供商,HTTP隧道可以让每个请求从一个随机 IP 转发(秒级5个,最高200个,超过会429)。

Node中如何配置代理服务器

axios

使用axios的话,Node中支持 proxy 参数,参照文档完成即可。

const axios = require('axios');
// 要访问的目标页面
var targetUrl = "https://www.lilnong.top/cors/sf";
// 配置代理服务器信息
var proxy = {
    host: "8.8.8.8", //代理服务器地址
    port: 80,//端口
    auth: { // auth认证信息,阿布云那边有,squid 的话不需要
        username: '',password: ''
    }
};
// https://github.com/axios/axios#request-config
axios.get(targetUrl,{proxy:proxy})
    .then((response) => console.log(response.data))
    .catch((error) => console.log(error))

axios 异常情况

axios配置代理服务器后无法请求https地址如何解决?

首先我们先确定两种情况

  • http 可以正常请求
  • https 返回501

这个问题是因为axios支持导致的,有两个解决办法。

使用 axios-https-proxy-fix 版本来代替 axios。

使用 tunnel 隧道来处理。

 axios('https://www.lilnong.top/cors/sf2',{
         proxy: false,
         httpsAgent: tunnel.httpsOverHttp({proxy:{
             host: '8.8.8.8',//代理服务器域名或者ip
             port: 80 //代理服务器端口
         }})
     })
     .then(v=>console.log(jsON.stringify(v.data)))
     .catch(v=>console.log(v.message))

request

如果我们使用的不是 axios,而且 request 库的话,也是可以的。

request({
    url:'https://www.lilnong.top/cors/sf3',
    proxy: 'http://8.8.8.8:80'//代理服务器地址 
    // "http://" + proxyUser + ":" + proxyPass + "@" + proxyHost + ":" + proxyPort;
}, function (error, response, body) {
    console.log('body:', body);
});

request 异常情况

npm install request 装不上

request has been deprecated, see https://github.com/request/request/issues/3142

因为 request 不会在开发新的功能了,不推荐再使用了。

也因为用的人实在太多了,需要考虑的兼容太多,所以整个库转为了维护。

这个时候我们可以试试用 cnpm install request 来装

其他测试请求代理服务器的方法

curl

使用 curl 我们可以在服务器上很快的看到代理服务器是否好使。

curl -x "http://8.8.8.8:80" https://www.lilnong.top/cors/sf4

-x 是设置代理服务器地址, x 是小写哦。

别写错,大写的是设置请求方式 -X POST。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Node.js 的异步 IO 性能探讨

    Node.js 的异步 IO 性能探讨

    Node.js 的卖点是「异步单线程」,虽然主流 Web 后端编程语言中,对异步编程有很好支持的语言并不少,但只有 Node.js 丧心病狂地将所有 IO 强制异步进行。
    2014-10-10
  • Node.js中path.join()优势例举分析

    Node.js中path.join()优势例举分析

    在本篇文章里小编给大家整理的是一篇关于Node.js中path.join()优势例举分析,有兴趣的朋友们可以学习下。
    2021-08-08
  • node.js中的fs.renameSync方法使用说明

    node.js中的fs.renameSync方法使用说明

    这篇文章主要介绍了node.js中的fs.renameSync方法使用说明,本文介绍了fs.renameSync的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node.js中使用q.js实现api的promise化

    node.js中使用q.js实现api的promise化

    这篇文章主要介绍了node.js中使用q.js实现api的promise化,promise一个标准,它描述了异步调用的返回结果,包括正确返回结果和错误处理,需要的朋友可以参考下
    2014-09-09
  • Windows系统下使用Sublime搭建nodejs环境

    Windows系统下使用Sublime搭建nodejs环境

    最近在研究Nodejs开发,俗话说,工欲善其事,必先利其器,当然要找到一款用着顺手的编辑器作为开始。这里我们选择的是Sublime Text 3,除了漂亮的用户界面,最吸引我的就是它的插件扩展功能以及跨平台特性。
    2015-04-04
  • NodeJS使用JWT跨域身份验证方案详解

    NodeJS使用JWT跨域身份验证方案详解

    JWT是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,其组成部分为Header、Payload、Signature.Payload部分才是真正的用户信息,它是用户信息经过加密之后生成的字符串,Header和Signature是安全性相关的部分,只是为了保证token的安全性
    2023-02-02
  • node中koa中间件机制详解

    node中koa中间件机制详解

    本篇文章主要主要介绍了node中koa中间件机制详解,详细的介绍了koa和兼容问题,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • 轻松创建nodejs服务器(9):实现非阻塞操作

    轻松创建nodejs服务器(9):实现非阻塞操作

    这篇文章主要介绍了轻松创建nodejs服务器(9):实现非阻塞操作,本系列文章会教你一步一步创建一个完整的服务器,要的朋友可以参考下
    2014-12-12
  • Node.js和MongoDB实现简单日志分析系统

    Node.js和MongoDB实现简单日志分析系统

    这篇文章主要介绍了Node.js和MongoDB实现简单日志分析系统,本文给出了服务器端、客户端、图表生成、Shell自动执行等功能的实现代码,需要的朋友可以参考下
    2015-04-04
  • Node.js管理工具npm的具体使用

    Node.js管理工具npm的具体使用

    NPM是随同NodeJS一起安装的包管理工具,允许用户从NPM服务器下载别人编写的第三方包到本地使用,本文主要介绍了Node.js管理工具npm的具体使用,感兴趣的可以了解一下
    2023-12-12

最新评论