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 相关文章推荐
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 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文本转图片自动换行的方法
2013/03/13 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
php中关于换行的实例写法
2019/09/26 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
Django forms组件的使用教程
2018/10/08 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
Python如何读写字节数据
2020/08/05 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
岗位职责范本
2013/11/23 职场文书
学术会议欢迎词
2014/01/09 职场文书
劳动模范事迹材料
2014/01/19 职场文书
保安公司服务承诺书
2014/05/28 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
分居协议书范本
2014/11/03 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
2015年董事长秘书工作总结
2015/07/23 职场文书
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python