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
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
nodejs教程之制作一个简单的文章发布系统
Nov 21 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
nodejs简单实现中英文翻译
May 04 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
nodeJs爬虫获取数据简单实现代码
Mar 29 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
详解nodejs 文本操作模块-fs模块(三)
Dec 22 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
ubuntu编译nodejs所需的软件并安装
Sep 12 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
uni-app实现点赞评论功能
2019/11/25 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
django 多数据库配置教程
2018/05/30 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
播音主持女孩的自我评价分享
2013/11/20 职场文书
煤矿班组长的职责
2013/12/25 职场文书
预备党员转正思想汇报
2014/01/12 职场文书
计算机网络专业求职信
2014/06/05 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
唐山大地震观后感
2015/06/05 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技