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实用示例 缩址还原
Dec 28 NodeJs
NodeJS与Mysql的交互示例代码
Aug 18 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
浅谈JS和Nodejs中的事件驱动
May 05 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
PHP中数组的分组排序实例
2014/06/01 PHP
深入理解PHP内核(一)
2015/11/10 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
python 正则式使用心得
2009/05/07 Python
Python笔记(叁)继续学习
2012/10/24 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
浅谈python锁与死锁问题
2020/08/14 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
书香校园活动方案
2014/02/28 职场文书
先进事迹报告会主持词
2014/04/02 职场文书
村抢险救灾方案
2014/05/09 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers