nodejs中request库使用HTTPS代理的方法


Posted in NodeJs onApril 30, 2019

正在尝试改用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当然也支持自签名证书,不过我暂时没这方面需求,就没继续摸索了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
NodeJS的Promise的用法解析
May 05 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 NodeJs
nodejs结合socket.io实现websocket通信功能的方法
Jan 12 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
nodejs基础之多进程实例详解
Dec 27 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 NodeJs
nodejs中实现修改用户路由功能
May 24 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
Apr 29 #NodeJs
nodejs检测因特网是否断开的解决方案
Apr 17 #NodeJs
Nodejs实现用户注册功能
Apr 14 #NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 #NodeJs
nodejs分离html文件里面的js和css的方法
Apr 09 #NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 #NodeJs
Nodejs核心模块之net和http的使用详解
Apr 02 #NodeJs
You might like
一个PHP并发访问实例代码
2012/09/06 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
Python闭包实现计数器的方法
2015/05/05 Python
Python3 replace()函数使用方法
2018/03/19 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
Django数据库操作之save与update的使用
2020/04/01 Python
python IDLE添加行号显示教程
2020/04/25 Python
Python通过Pillow实现图片对比
2020/04/29 Python
在keras中实现查看其训练loss值
2020/06/16 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
美国在线工具商店:Acme Tools
2018/06/26 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
服务之星获奖感言
2014/01/21 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
班主任先进事迹材料
2014/12/17 职场文书
人生遥控器观后感
2015/06/11 职场文书
2015年暑假生活总结
2015/07/13 职场文书
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
Python开发简易五子棋小游戏
2022/05/02 Python