nodejs中request庫使用HTTPS代理的方法
來源:懂視網(wǎng)
責(zé)編:小采
時間:2020-11-27 21:57:40
nodejs中request庫使用HTTPS代理的方法
nodejs中request庫使用HTTPS代理的方法:正在嘗試改用NodeJS編寫爬蟲,http請求庫選擇了 request ,用起來還是挺簡單的。 現(xiàn)在有個需求,需要用Fiddler抓包我發(fā)出去的請求,以便和瀏覽器發(fā)出去的包進(jìn)行對比。 因?yàn)樾枰饷蹾TTPS報文,需要讓node要么忽略證書安全,要么信任Fiddler的CA證書
導(dǎo)讀nodejs中request庫使用HTTPS代理的方法:正在嘗試改用NodeJS編寫爬蟲,http請求庫選擇了 request ,用起來還是挺簡單的。 現(xiàn)在有個需求,需要用Fiddler抓包我發(fā)出去的請求,以便和瀏覽器發(fā)出去的包進(jìn)行對比。 因?yàn)樾枰饷蹾TTPS報文,需要讓node要么忽略證書安全,要么信任Fiddler的CA證書

正在嘗試改用NodeJS編寫爬蟲,http請求庫選擇了 request ,用起來還是挺簡單的。
現(xiàn)在有個需求,需要用Fiddler抓包我發(fā)出去的請求,以便和瀏覽器發(fā)出去的包進(jìn)行對比。
因?yàn)樾枰饷蹾TTPS報文,需要讓node要么忽略證書安全,要么信任Fiddler的CA證書。
網(wǎng)上找了一圈,總結(jié)如下:
方法一:設(shè)置環(huán)境變量
設(shè)置環(huán)境變量NODE_TLS_REJECT_UNAUTHORIZED=0
即"不拒絕未認(rèn)證的證書"
但是直接修改系統(tǒng)環(huán)境變量比較危險,因?yàn)闀绊懙剿衝odejs的程序;比較穩(wěn)妥的辦法是腳本中調(diào)用process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; 這樣僅對本進(jìn)程生效
方法二:每請求單獨(dú)設(shè)置忽略證書安全
上述方法還是有一定風(fēng)險,因?yàn)楫?dāng)前nodejs進(jìn)程都受此全局設(shè)置影響
可以在request的options中添加rejectUnauthorized: false選項(xiàng)來針對單個請求忽略證書檢查
當(dāng)然也可以用request.defaults直接設(shè)置默認(rèn)選項(xiàng)
const request = require("request").defaults({
proxy: "http://127.0.0.1:8888",
rejectUnauthorized: false,
})
request.get("https://www.baidu.com").on("response", console.log)
方法三:使用Fiddler的CA證書
這個方法是最穩(wěn)妥的,不會讓你的子系統(tǒng)產(chǎn)生任何溢出影響
首先在Fiddler內(nèi)把其根證書導(dǎo)出到桌面:Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop
導(dǎo)出的文件是個.cer證書,經(jīng)測試nodejs不直接支持,需要用openssl轉(zhuǎn)換成PEM格式(我的openssl是cygwin裝的)
openssl x509 -inform DER -in FiddlerRoot.cer -outform PEM -out fiddler.pem
把轉(zhuǎn)換出來的fiddler.pem放到你的程序能訪問的位置
使用ca選項(xiàng)來指定CA證書
const request = require("request").defaults({
proxy: "http://127.0.0.1:8888",
ca: require("fs").readFileSync("path/to/fiddler.pem", {encoding: "utf-8"}),
})
request.get("https://www.baidu.com").on("response", console.log)
另外:request當(dāng)然也支持自簽名證書,不過我暫時沒這方面需求,就沒繼續(xù)摸索了
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
nodejs中request庫使用HTTPS代理的方法
nodejs中request庫使用HTTPS代理的方法:正在嘗試改用NodeJS編寫爬蟲,http請求庫選擇了 request ,用起來還是挺簡單的。 現(xiàn)在有個需求,需要用Fiddler抓包我發(fā)出去的請求,以便和瀏覽器發(fā)出去的包進(jìn)行對比。 因?yàn)樾枰饷蹾TTPS報文,需要讓node要么忽略證書安全,要么信任Fiddler的CA證書