NodeJS中配置请求代理服务器

文章很久都没更新,最近在家办公,超级忙。
准备更新更新我最近遇到的问题,bug之类的。前端

先来讲说场景,以前我写过一个小爬虫,node写的,一直都是当作玩具来用的。
某天不知道谁在个人接口,致使被拉黑了。
大佬让我换个机器从新装一下,可是由于个人里面用到了一个图片处理库 sharp 装起来很烦,而后就研究研究能不能搞个代理服务器。node

image.png

大致是如上图,用户的请求最后都会经过个人服务器去请求对方服务器,这就致使频率一高就被封。
那么我能够请求代理服务器,甚至是作一个代理池,再把请求平均开。ios

既然方案定下来了,那么咱们就要开始测试了。先找找本身怎么作,而后看看有没有现成的服务。git

代理服务器

squid

squid 是应用层的代理服务软件,它能够提供缓存加速、应用层过滤的功能。
个人服务器就能够理解为客户机,经过代理服务器请求对方服务器。能够达到两个目的github

  1. 缓存一部分请求,防止同一地址,短期内大量请求。
  2. 隐藏客户机ip

image.png

阿布云

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

Node中如何配置代理服务器

axios

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

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地址如何解决?

首先咱们先肯定两种状况缓存

  1. http 能够正常请求
  2. https 返回501

这个问题是由于axios支持致使的,有两个解决办法。服务器

  1. 使用 axios-https-proxy-fix 版原本代替 axios。
    https://www.npmjs.com/package...
  2. 使用 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

微信公众号:前端linong

clipboard.png

相关文章
相关标签/搜索