溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

nodejs中request庫(kù)使用HTTPS代理的方法

發(fā)布時(shí)間:2020-10-02 17:38:53 來(lái)源:腳本之家 閱讀:374 作者:rockswang 欄目:web開(kāi)發(fā)

正在嘗試改用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í)有所幫助,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI