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使用formidable实现文件上传
Oct 27 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
NodeJs通过async/await处理异步的方法
Oct 09 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
nodejs+express搭建多人聊天室步骤
Feb 12 NodeJs
nodeJS服务器的创建和重新启动的实现方法
May 12 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
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
PHP中英混合字符串截取函数代码
2011/07/17 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
JavaScript 继承详解(三)
2009/07/13 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
利用python代码写的12306订票代码
2015/12/20 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
python实现电子产品商店
2019/02/26 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
生态学毕业生自荐信
2013/10/27 职场文书
毕业生求职推荐信
2013/11/04 职场文书
初中生期末考试的自我评价
2013/12/17 职场文书
网络书店创业计划书
2014/02/07 职场文书
电子商务专业求职信
2014/03/08 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
教师教育教学随笔
2015/08/15 职场文书
Golang中channel的原理解读(推荐)
2021/10/16 Golang