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中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
详解nodejs 文本操作模块-fs模块(五)
Dec 23 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
Nodejs把接收图片base64格式保存为文件存储到服务器上
Sep 26 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 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/09/16 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
Python的互斥锁与信号量详解
2019/09/12 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
使用python计算三角形的斜边例子
2020/04/15 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
python绘制汉诺塔
2021/03/01 Python
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
物流专员岗位职责
2014/02/17 职场文书
无偿献血倡议书
2014/04/14 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
多媒体教室标语
2014/06/26 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL