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教程之异步I/O
Nov 21 NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 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制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
2020/06/07 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
如何在sublime编辑器中安装python
2020/05/20 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
瀑布模型都有哪些优缺点
2014/06/23 面试题
写好求职信第一句话的技巧
2013/10/26 职场文书
创先争优演讲稿
2014/09/15 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
财务人员个人工作总结
2015/02/27 职场文书
python中print格式化输出的问题
2021/04/16 Python
PHP中多字节字符串操作实例详解
2021/08/23 PHP
nginx配置限速限流基于内置模块
2022/05/02 Servers