文章很久都沒更新,最近在家辦公,超級忙。
準備更新更新我最近遇到的問題,bug之類的。前端
先來講說場景,以前我寫過一個小爬蟲,node寫的,一直都是當作玩具來用的。
某天不知道誰在刷個人接口,致使被拉黑了。
大佬讓我換個機器從新裝一下,可是由於個人裏面用到了一個圖片處理庫 sharp
裝起來很煩,而後就研究研究能不能搞個代理服務器。node
大致是如上圖,用戶的請求最後都會經過個人服務器去請求對方服務器,這就致使頻率一高就被封。
那麼我能夠請求代理服務器,甚至是作一個代理池,再把請求平均開。ios
既然方案定下來了,那麼咱們就要開始測試了。先找找本身怎麼作,而後看看有沒有現成的服務。git
squid 是應用層的代理服務軟件,它能夠提供緩存加速、應用層過濾的功能。
個人服務器就能夠理解爲客戶機,經過代理服務器請求對方服務器。能夠達到兩個目的github
阿布雲就是一個作代理的服務提供商,HTTP隧道可讓每一個請求從一個隨機 IP 轉發(秒級5個,最高200個,超過會429)。npm
使用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-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))
若是咱們使用的不是 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 has been deprecated, see https://github.com/request/request/issues/3142
由於 request 不會在開發新的功能了,不推薦再使用了。
也由於用的人實在太多了,須要考慮的兼容太多,因此整個庫轉爲了維護。
這個時候咱們能夠試試用 cnpm install request
來裝
使用 curl 咱們能夠在服務器上很快的看到代理服務器是否好使。
curl -x "http://8.8.8.8:80" https://www.lilnong.top/cors/sf4
-x
是設置代理服務器地址, x 是小寫哦。別寫錯,大寫的是設置請求方式 -X POST
。