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

相關文章
相關標籤/搜索