NodeJS中配置請求代理服務(wù)器方式
NodeJS配置請求代理服務(wù)器
先來說說場景,之前我寫過一個小爬蟲,node寫的,一直都是當(dāng)做玩具來用的。
某天不知道誰在刷我的接口,導(dǎo)致被拉黑了。
大佬讓我換個機(jī)器重新裝一下,但是因為我的里面用到了一個圖片處理庫 sharp 裝起來很煩,然后就研究研究能不能搞個代理服務(wù)器。

大體是如上圖,用戶的請求最后都會通過我的服務(wù)器去請求對方服務(wù)器,這就導(dǎo)致頻率一高就被封。
那么我可以請求代理服務(wù)器,甚至是做一個代理池,再把請求平均開。
既然方案定下來了,那么我們就要開始測試了。
先找找自己怎么做,然后看看有沒有現(xiàn)成的服務(wù)。
代理服務(wù)器
squid
squid 是應(yīng)用層的代理服務(wù)軟件,它可以提供緩存加速、應(yīng)用層過濾的功能。
我的服務(wù)器就可以理解為客戶機(jī),通過代理服務(wù)器請求對方服務(wù)器??梢赃_(dá)到兩個目的
緩存一部分請求,防止同一地址,短時間內(nèi)大量請求。
隱藏客戶機(jī)ip

阿布云
阿布云就是一個做代理的服務(wù)提供商,HTTP隧道可以讓每個請求從一個隨機(jī) IP 轉(zhuǎn)發(fā)(秒級5個,最高200個,超過會429)。
Node中如何配置代理服務(wù)器
axios
使用axios的話,Node中支持 proxy 參數(shù),參照文檔完成即可。
const axios = require('axios');
// 要訪問的目標(biāo)頁面
var targetUrl = "https://www.lilnong.top/cors/sf";
// 配置代理服務(wù)器信息
var proxy = {
host: "8.8.8.8", //代理服務(wù)器地址
port: 80,//端口
auth: { // auth認(rèn)證信息,阿布云那邊有,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配置代理服務(wù)器后無法請求https地址如何解決?
首先我們先確定兩種情況
- http 可以正常請求
- https 返回501
這個問題是因為axios支持導(dǎo)致的,有兩個解決辦法。
使用 axios-https-proxy-fix 版本來代替 axios。
使用 tunnel 隧道來處理。
axios('https://www.lilnong.top/cors/sf2',{
proxy: false,
httpsAgent: tunnel.httpsOverHttp({proxy:{
host: '8.8.8.8',//代理服務(wù)器域名或者ip
port: 80 //代理服務(wù)器端口
}})
})
.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'//代理服務(wù)器地址
// "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 不會在開發(fā)新的功能了,不推薦再使用了。
也因為用的人實在太多了,需要考慮的兼容太多,所以整個庫轉(zhuǎn)為了維護(hù)。
這個時候我們可以試試用 cnpm install request 來裝
其他測試請求代理服務(wù)器的方法
curl
使用 curl 我們可以在服務(wù)器上很快的看到代理服務(wù)器是否好使。
curl -x "http://8.8.8.8:80" https://www.lilnong.top/cors/sf4
-x 是設(shè)置代理服務(wù)器地址, x 是小寫哦。
別寫錯,大寫的是設(shè)置請求方式 -X POST。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
nodejs 中模擬實現(xiàn) emmiter 自定義事件
這篇文章主要介紹了Nodejs中自定義事件實例,比較簡單的一個例子,需要的朋友可以參考下。2016-02-02
node.js三個步驟實現(xiàn)一個服務(wù)器及Express包使用
這篇文章主要介紹了node.js三個步驟實現(xiàn)一個服務(wù)器及Express包使用,文章通過新建一個文件展開全文內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
node.js用fs.rename強(qiáng)制重命名或移動文件夾的方法
本篇文章主要介紹了node.js用fs.rename強(qiáng)制重命名或移動文件夾的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12

