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进程管理模块forever详解
Jun 01 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 NodeJs
nodejs模块学习之connect解析
Jul 05 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
深入分析php之面向对象
2013/05/15 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
koa-router源码学习小结
2018/09/07 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
详解Python_shutil模块
2019/03/15 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
python实现取余操作的简单实例
2020/08/16 Python
python多线程和多进程关系详解
2020/12/14 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
什么是.net
2015/08/03 面试题
数控专业推荐信范文
2013/12/02 职场文书
军训自我鉴定
2013/12/14 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
2014年个人售房协议书
2014/10/30 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
新娘婚礼致辞
2015/07/27 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
初中物理教学反思
2016/02/19 职场文书