当前位置: 首页 > 后端技术 > Node.js

nodejs中的请求库使用HTTPS代理

时间:2023-04-03 18:35:23 Node.js

工具和资料QQ群-Javascript高级爬虫-作者自建群,欢迎加入!awesome-java-crawler-作者收集了爬虫相关的工具和资料。文中尝试使用NodeJS编写爬虫。http请求库选择request,使用起来还是挺简单的。现在有个需求,我需要用Fiddler抓取我发过来的请求,以便和浏览器发过来的包进行对比。因为需要在Fiddler中解密HTTPS包,需要让node要么忽略证书安全,要么信任Fiddler的CA证书。在网上找了一圈,总结如下:方法一:设置环境变量NODE_TLS_REJECT_UNAUTHORIZED=0,即“不拒绝未经认证的证书”,但是直接修改系统环境变量是危险的,因为它会影响所有的nodejs程序;更安全最好的方法是在脚本中调用process.env["NODE_TLS_REJECT_UNAUTHORIZED"]=0;这只会对这个过程生效。方法二:分别设置每个请求忽略证书安全。上面的方法还是有一定风险的,因为当前的nodejs进程是受这个全局设置影响的。在请求的选项中添加rejectUnauthorized:false选项以忽略单个请求的证书检查。当然也可以使用request.defaults直接设置默认选项constrequest=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->ExportRootCertificatetoDesktop导出的文件是.cer证书,经测试nodejs不直接支持,需要使用openssl转换成PEM格式(我的openssl是用cygwin安装的)opensslx509-informDER-inFiddlerRoot.cer-outformPEM-outfiddler.pem把转换后的fiddler.pem用ca选项指定CA证书constrequest=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也支持自签名证书,不过我暂时没有这个需求,所以没继续探索