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服务器(4):路由
Dec 18 NodeJs
轻松创建nodejs服务器(10):处理上传图片
Dec 18 NodeJs
nodejs中实现路由功能
Dec 29 NodeJs
Windows系统下使用Sublime搭建nodejs环境
Apr 13 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
nodejs multer实现文件上传与下载
May 10 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
May 30 NodeJs
nodejs+express最简易的连接数据库的方法
Dec 23 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类
2006/07/15 PHP
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
花卉与景观设计系大学生求职信
2013/10/01 职场文书
应聘护士自荐信
2013/10/21 职场文书
写好自荐信的要点
2013/11/06 职场文书
高中毕业自我评价
2014/02/08 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
申请吧主发表的感言
2015/08/03 职场文书
学校教师培训工作总结
2015/10/14 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js