正在嘗試改用NodeJS編寫爬蟲,http請求庫選擇了 request ,用起來還是挺簡單的。
現在有個需求,需要用Fiddler抓包我發出去的請求,以便和瀏覽器發出去的包進行對比。
因為需要解密HTTPS報文,需要讓node要么忽略證書安全,要么信任Fiddler的CA證書。
網上找了一圈,總結如下:
方法一:設置環境變量
設置環境變量NODE_TLS_REJECT_UNAUTHORIZED=0 即"不拒絕未認證的證書" 但是直接修改系統環境變量比較危險,因為會影響到所有nodejs的程序;比較穩妥的辦法是腳本中調用process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; 這樣僅對本進程生效方法二:每請求單獨設置忽略證書安全
上述方法還是有一定風險,因為當前nodejs進程都受此全局設置影響 可以在request的options中添加rejectUnauthorized: false選項來針對單個請求忽略證書檢查 當然也可以用request.defaults直接設置默認選項 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證書
這個方法是最穩妥的,不會讓你的子系統產生任何溢出影響 首先在Fiddler內把其根證書導出到桌面:Tools -> Options -> HTTPS -> Actions -> Export Root Certificate to Desktop 導出的文件是個.cer證書,經測試nodejs不直接支持,需要用openssl轉換成PEM格式(我的openssl是cygwin裝的) openssl x509 -inform DER -in FiddlerRoot.cer -outform PEM -out fiddler.pem 把轉換出來的fiddler.pem放到你的程序能訪問的位置 使用ca選項來指定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當然也支持自簽名證書,不過我暫時沒這方面需求,就沒繼續摸索了
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持錯新站長站。
|
新聞熱點
疑難解答
圖片精選