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 相关文章推荐
使用forever管理nodejs应用教程
Jun 03 NodeJs
Google官方支持的NodeJS访问API,提供后台登录授权
Jul 29 NodeJs
nodejs教程之制作一个简单的文章发布系统
Nov 21 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
Nodejs+express+ejs简单使用实例代码
Sep 18 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 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 object转数组示例
2014/01/15 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
详解PHP归并排序的实现
2016/10/18 PHP
Javascript var变量隐式声明方法
2009/10/19 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
JS常用算法实现代码
2016/11/14 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
Python记录详细调用堆栈日志的方法
2015/05/05 Python
谈谈Python中的while循环语句
2019/03/10 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
Python随机数函数代码实例解析
2020/02/09 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
银行实习人员自我鉴定
2013/09/22 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
搞笑征婚广告词
2014/03/17 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
电子专业自荐信
2014/07/01 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
Go中的条件语句Switch示例详解
2021/08/23 Golang
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
vue+echarts实现多条折线图
2022/03/21 Vue.js