美文网首页
NodeJS中配置请求代理服务器

NodeJS中配置请求代理服务器

作者: 茶艺瑶 | 来源:发表于2020-03-14 11:23 被阅读0次

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

    先来说说场景,之前我写过一个小爬虫,node写的,一直都是当做玩具来用的。
    某天不知道谁在我的接口,导致被拉黑了。
    大佬让我换个机器重新装一下,但是因为我的里面用到了一个图片处理库 sharp 装起来很烦,然后就研究研究能不能搞个代理服务器。

    image.png

    大体是如上图,用户的请求最后都会通过我的服务器去请求对方服务器,这就导致频率一高就被封。
    那么我可以请求代理服务器,甚至是做一个代理池,再把请求平均开。

    既然方案定下来了,那么我们就要开始测试了。先找找自己怎么做,然后看看有没有现成的服务。

    代理服务器

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

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

    阿布云

    阿布云就是一个做代理的服务提供商,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地址如何解决?

    首先我们先确定两种情况

    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

    相关文章

      网友评论

          本文标题:NodeJS中配置请求代理服务器

          本文链接:https://www.haomeiwen.com/subject/neomshtx.html