zoukankan      html  css  js  c++  java
  • 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 来装

    资源搜索网站大全https://55wd.com 广州品牌设计公司http://www.maiqicn.com

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

    curl

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

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

    -x 是设置代理服务器地址, x 是小写哦。别写错,大写的是设置请求方式 -X POST。

  • 相关阅读:
    Mysql必知必会
    KafKa简介和利用docker配置kafka集群及开发环境
    深入理解python
    性能测试报告模板
    Zookeeper的基本原理(zk架构、zk存储结构、watch机制、独立安装zk、集群间同步复制)
    Shell命令和流程控制[linux常用命令的使用]
    Javascrip之BOM
    分布式文件系统HDFS-部署和配置
    分布式计算框架-Spark(spark环境搭建、生态环境、运行架构)
    框架—Mybatis搭建
  • 原文地址:https://www.cnblogs.com/qianxiaox/p/13751107.html
Copyright © 2011-2022 走看看