nodejs中request庫(kù)使用HTTPS代理的方法
正在嘗試改用NodeJS編寫(xiě)爬蟲(chóng),http請(qǐng)求庫(kù)選擇了 request ,用起來(lái)還是挺簡(jiǎn)單的。
現(xiàn)在有個(gè)需求,需要用Fiddler抓包我發(fā)出去的請(qǐng)求,以便和瀏覽器發(fā)出去的包進(jìn)行對(duì)比。
因?yàn)樾枰饷蹾TTPS報(bào)文,需要讓node要么忽略證書(shū)安全,要么信任Fiddler的CA證書(shū)。
網(wǎng)上找了一圈,總結(jié)如下:
方法一:設(shè)置環(huán)境變量
- 設(shè)置環(huán)境變量NODE_TLS_REJECT_UNAUTHORIZED=0
- 即"不拒絕未認(rèn)證的證書(shū)"
- 但是直接修改系統(tǒng)環(huán)境變量比較危險(xiǎn),因?yàn)闀?huì)影響到所有nodejs的程序;比較穩(wěn)妥的辦法是腳本中調(diào)用process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; 這樣僅對(duì)本進(jìn)程生效
方法二:每請(qǐng)求單獨(dú)設(shè)置忽略證書(shū)安全
- 上述方法還是有一定風(fēng)險(xiǎn),因?yàn)楫?dāng)前nodejs進(jìn)程都受此全局設(shè)置影響
- 可以在request的options中添加rejectUnauthorized: false選項(xiàng)來(lái)針對(duì)單個(gè)請(qǐng)求忽略證書(shū)檢查
- 當(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證書(shū)
- 這個(gè)方法是最穩(wěn)妥的,不會(huì)讓你的子系統(tǒng)產(chǎn)生任何溢出影響
- 首先在Fiddler內(nèi)把其根證書(shū)導(dǎo)出到桌面:Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop
- 導(dǎo)出的文件是個(gè).cer證書(shū),經(jīng)測(cè)試nodejs不直接支持,需要用openssl轉(zhuǎn)換成PEM格式(我的openssl是cygwin裝的)
- openssl x509 -inform DER -in FiddlerRoot.cer -outform PEM -out fiddler.pem
- 把轉(zhuǎn)換出來(lái)的fiddler.pem放到你的程序能訪問(wèn)的位置
- 使用ca選項(xiàng)來(lái)指定CA證書(shū)
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)然也支持自簽名證書(shū),不過(guò)我暫時(shí)沒(méi)這方面需求,就沒(méi)繼續(xù)摸索了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Nodejs + Websocket 指定發(fā)送及群聊的實(shí)現(xiàn)
這篇文章主要介紹了Nodejs + Websocket 指定發(fā)送及群聊的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Node+Express搭建HTTPS服務(wù)的實(shí)現(xiàn)
最近開(kāi)發(fā)需要搭建一個(gè)https的服務(wù),正好最近在用nodejs和express,本文章主要介紹了Node+Express搭建HTTPS服務(wù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12node.js中ws模塊創(chuàng)建服務(wù)端與客戶端實(shí)例代碼
在Node.js中提供了http模塊與https模塊,專用于創(chuàng)建HTTP服務(wù)器、HTTP客戶端,以及HTTPS服務(wù)器及HTTPS客戶端,同時(shí)實(shí)現(xiàn)這些服務(wù)器端與客戶端之中所需進(jìn)行的處理,下面這篇文章主要給大家介紹了關(guān)于node.js中ws模塊創(chuàng)建服務(wù)端與客戶端的相關(guān)資料,需要的朋友可以參考下2023-05-05node.js+postman實(shí)現(xiàn)模擬HTTP服務(wù)器與客戶端交互
本文主要介紹了node.js+postman實(shí)現(xiàn)模擬HTTP服務(wù)器與客戶端交互,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07Nodejs基于LRU算法實(shí)現(xiàn)的緩存處理操作示例
這篇文章主要介紹了Nodejs基于LRU算法實(shí)現(xiàn)的緩存處理操作,結(jié)合具體實(shí)例形式分析了LRU算法的原理、功能以及nodejs使用LRU算法實(shí)現(xiàn)緩存處理操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03淺談node中的exports與module.exports的關(guān)系
本篇文章主要介紹了淺談node中的exports與module.exports的關(guān)系,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08